我知道这是一个常见问题,但是我遇到了一些错误,希望能有所帮助。
我想将多个子文件夹中的1000个csv文件合并为一个文件。脚本是在MainFolder
和应通过子如运行01_2015
至05_2015
与CSV文件合并成的一个文件MainFolder
。
我有以下文件夹结构:
-MainFolder
-01_2015
-02_2015
-03_2015
-04_2015
-05_2015
我正在使用的脚本(从此处获取):
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET SUMMARY_FILE=sumfile.csv
IF EXIST "%SUMMARY_FILE%" (DEL "%SUMMARY_FILE%")
SET /A LINE_COUNT=1
FOR /F "usebackq tokens=*" %%f IN (`DIR /S /B *.csv`) DO (
FOR /F "usebackq tokens=*" %%s IN ("%%~f") DO (
ECHO !LINE_COUNT!,%%s >>"%SUMMARY_FILE%"
SET /A LINE_COUNT=!LINE_COUNT! + 1
)
)
EXIT /B 0
它实际上正在运行超过1000个文件。但是文件不会合并。该怎么办?
尝试以下经过稍微修改的代码:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
PUSHD "%~dp0"
SET "SUMMARY_FILE=sumfile.csv"
DEL /F "%SUMMARY_FILE%" 2>nul
SET "LINE_COUNT=1"
FOR /F "tokens=*" %%f IN ('DIR /S /B *.csv 2^>nul') DO (
FOR /F "usebackq tokens=* eol=ÿ" %%s IN ("%%~f") DO (
>>"%SUMMARY_FILE%" ECHO !LINE_COUNT!%%s
SET /A LINE_COUNT+=1
)
)
POPD
ENDLOCAL
>>"%SUMMARY_FILE%"
现在,重定向位于该行的开头,该行将具有当前行号的当前CSV文件中的行输出到摘要文件中。这样可以避免在摘要文件中每行的末尾添加一个空格。
在运行批处理文件时,您是否在设置为当前目录的目录中具有写权限?
我添加了这一行PUSHD "%~dp0"
,以确保在开始处理之前批处理文件的目录是当前目录,并POPD
在退出批处理之前使用还原以前的工作目录。
eol=ÿ
用于将很有可能在CSV文件中不存在的字符定义为行尾字符,而不是;
默认字符。德语CSV文件包含;
作为分隔符。
字符ÿ
在代码页Windows-1252中的十进制值为255 ,即代码页Windows-1252中的最后一个字符。此字节是OEM代码页850中的不间断空格。因此,使用代码页850或OEM代码页437显示或编辑批处理文件时,eol=
将在查看器/编辑器中显示该批处理文件。
无分离器之间应使用!LINE_COUNT!
和%%s
若所有的线条与在CSV文件分号这也是场值之间的分隔已经开始。否则,应将分隔符(逗号,分号,管道(转义),制表符)插入左侧%%s
。
另一个问题是,如果CSV文件是使用UTF-16编码的Unicode文件。在这种情况下,将不会创建任何摘要文件,因为FOR命令将从包含大量空字节的CSV文件中读取任何行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句