我有一个目录,里面有 50 个 txt 文件。我需要批量将每个文件的最后一行合并到一个 txt 文件中。
我还需要将每个文件的名称与合并的数据合并在同一行。
我现在能够将所有文件合并为一个文件,每行都有文件名,但我只想要每个文件的最后一行,而不是全部。
以下是我目前正在使用的。
@ECHO OFF
ECHO Creating %1...
SET "sourcedir=C:\Users\User01\Documents\temp"
FOR /F "Delims=" %%G IN ('DIR /B /a-d "%sourcedir%\*.txt"') DO (
ECHO Adding %%G
for /f "usebackq tokens=*" %%a in ("%sourcedir%\%%~G") do (
Echo %%a, %%G >> Status.csv
答案1
- 你要么需要延迟扩张或者一个子程序将文件内容读入变量并仅打印最后一行。
- 您的批次状态为创建
%1
,但您Status.csv
却使用。 - 您的批次(片段)缺少一些右括号。
@ECHO OFF & Setlocal EnableDelayedExpansion
If "%~1"=="" (Echo no output file provided & pause & exit /B 1)
ECHO Creating %1...
SET "sourcedir=C:\Users\User01\Documents\temp"
( Echo File,Lastline
For /f "Delims=" %%G IN ('DIR /B /a-d "%sourcedir%\*.txt"') DO (
For /f "usebackq tokens=*" %%a in ("%sourcedir%\%%~G") do Set "Line=%%a"
Echo %%G,!Line!
)
) > "%~1"