批量删除第一行,将文件名添加到每一行并合并 TXT 文件

Batch to remove first line, Add filename to each line and merge TXT files

我有一堆 TXT 文件(将近两百个),我需要对其执行以下任务:

  1. 从每个文件中删除第一行文本;
  2. 将文件名(不带扩展名)添加到文件中每个剩余行的开头;
  3. 将所有内容合并到一个 TXT 文件中。

我知道下面的命令会进行合并:

for %f in (*.txt) do type "%f">> output.txt

并且这个将预定义的文本添加到单个 txt 文件中每一行的开头:

(for /f "delims=" %L in (filename.txt) do @echo sometext%L)>> output.txt

关于如何让它发挥作用有什么建议吗?感谢所有帮助。提前致谢。

假设您是在 cmd 提示符下执行所有操作。如果您想从批处理文件中 运行 将百分比符号加倍。

for %F in (*.txt) do for /f "skip=1 usebackq delims=" %L in ("%~F") do echo %~nF%L>> output.txt

如果您需要它来保留空行或空白填充行,则第二个 for 循环更改为此。

FOR /F "skip=1 tokens=1* delims=:" %L in ('findstr /N /R "^" "%~F"') do echo %~nF%M>> output.txt

这会删除空行,但也会删除第一行并将文件名添加到每一行:

@echo off
>Output.txt (
for %%f in (*.txt) do (
  for /f "delims=" %%l in ('more +1 %%f') do (
    echo %%f:%%l
  )
))

此方法删除第一行,保留空行并插入文件名。我认为它也应该 运行 更快:

@echo off
setlocal EnableDelayedExpansion

set "file="
(for /F "tokens=1* delims=:" %%a in ('findstr "^" *.txt') do (
   if "%%a" neq "!file!" (
      set "file=%%a"
   ) else (
      echo %%~Na:%%b
   )
)) > output.tmp
REM ren output.tmp output.txt

输出文件 .txt 扩展名命名,以避免对其内容进行重新处理。