批处理文件:合并文本文件中的同名文本文件

时间:2018-05-31 20:58:22

标签: batch-file cmd

我使用

创建了一个特定文本文件的文件路径列表
dir /b /s "xinfo.txt" > index.txt

所有这些文本文件都是CSV,我想将它们合并/追加到一起以创建一个名为“sourcing_directory”的新文本文件。

我尝试过http://www.sidesofmarch.com/index.php/archive/2004/03/30/using-the-for-command-to-copy-files-listed-in-a-text-file/中提到的使用以下方法的方法:

for /f "delims=" %%i in (filelist.txt) do echo D|xcopy "\\server\share\folder\%%i" "c:\temp\%%i" /i /z /y

要将所有文本文件复制到一个文件夹中,以便我可以使用“复制”合并所有文件。然而,这似乎不起作用,因为index.txt的结构方式或所有文件具有相同名称的事实。

1 个答案:

答案 0 :(得分:0)

要合并多个文件,您可以这样做:

rem // Prepare empty file:
> "merged.csv" rem/
rem // Merge the files:
for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
    copy /Y "merged.csv"+"%%F" "merged.csv" /B
)

这不会以任何方式检查文件内容,因此对于CSV输入数据,每个输入文件都会被换行符终止,以获得有效的输出CSV文件。

如果无法保证这一点,则需要按for /F读取每个文件,忽略空行,即使没有以换行符终止也读取最后一行:

rem // Write to output file:
> "merged.csv" (
    for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
        rem // Read input files line by line:
        for /F usebackq^ delims^=^ eol^= %%L in ("%%F") do echo(%%L
    )
)

要使用头文件,请尝试以下操作:

rem // Copy header file:
copy /Y "header.csv" "merged.csv"
rem // Merge the files:
for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
    copy /Y "merged.csv"+"%%F" "merged.csv" /B
)

或者这个:

rem // Copy header file:
copy /Y "header.csv" "merged.csv"
rem // Append to output file:
>> "merged.csv" (
    for /F "delims=" %%F in ('dir /S /B "xinfo.txt"') do (
        rem // Read input files line by line:
        for /F usebackq^ delims^=^ eol^= %%L in ("%%F") do echo(%%L
    )
)