gpt4 book ai didi

batch-file - Windows 命令批处理脚本将文件名添加到合并文本文件中每一行的末尾

转载 作者:行者123 更新时间:2023-12-01 16:15:57 25 4
gpt4 key购买 nike

我是 Windows 命令行脚本的新手。我有一个批处理文件,我用它来将多个文本文件合并为一个。但是,我还希望能够将行来自的文本文件的名称添加到合并文件中每一行的末尾。

这是我目前正在使用的脚本:

@ECHO OFF
ECHO Creating %1...
FOR /F "usebackq tokens=1" %%G IN (`DIR /B "C:\My Documents\Data\*.txt"`) DO
(
ECHO Adding %%G
ECHO. >> Output.txt
TYPE %%G >> Output.txt
)

现在我知道要将文件名放入我需要使用的输出文件中:

ECHO %%G >> Output.txt 

但是我不确定如何将其添加到当前脚本中,因此它将文件名添加到每一行,我没有找到任何示例。

最佳答案

如果您愿意在每一行前面加上文件名而不是将文件名放在末尾,那么有一个简单的两行代码可以从命令行工作。此解决方案速度极快。

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

关于batch-file - Windows 命令批处理脚本将文件名添加到合并文本文件中每一行的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com