如果您愿意在每一行前面加上文件名而不是将文件名放在末尾,那么有一个简单的两行代码可以从命令行工作。这个解决方案非常快。
cd "C:\My Documents\Data"
findstr "^" *.txt >output.log
每行的格式为filename:line content
您的输出文件使用与您正在合并的文件不同的扩展名,这一点很重要。否则,您将面临命令处理自己的输出的风险!
另一种选择是确保输出到不同的文件夹,可能是父文件夹:
cd "C:\My Documents\Data"
findstr "^" *.txt >..\output.txt
或者,如果您愿意在输出中包含每个文件的完整路径,请确保当前目录与源目录不同,并使用
findstr "^" "C:\My Documents\Data\*.txt" >output.txt
上述解决方案的唯一缺点是,如果文本文件的最后一行不以换行符结尾,则会出现问题。这将导致下一个文件的第一行附加到前一个文件的最后一行。就像是:FILENAME1:last line without newlineFILENAME2:first line of next file
一个简单的脚本可以将换行符附加到最后一行缺少换行符的文件中。然后文件可以安全地与每一行的文件名前缀合并:
@echo off
if "%~1" equ ":FindFiles" goto :FindFiles
cd "C:\My Documents\Data"
:: Append newline to text files that are missing newline on last line
for /f "eol=: delims=" %%F in ('"%~f0" :FindFiles') do echo(>>"%%F"
:: Merge the text files and prefix each line with file name
findstr "^" *.txt >output.log
exit /b
:FindFiles
setlocal enableDelayedExpansion
:: Define LF to contain a newline character
set lf=^
:: The above 2 blank lines are critical - do not remove
:: List files that are missing newline on last line
findstr /vm "!lf!" *.txt