批处理将多个文本文件的第三行复制到一个新的文本文件中,并将原始文件名附加到每一行

时间:2013-04-30 20:52:45

标签: windows batch-file dos

在以下主题中:

batch to copy last line of several .txt files into 1 new .txt file and appends file name on new line

... dbenham为另一张海报提供了一个解决方案,完全符合我的需求。

    @echo off
setlocal enableDelayedExpansion
>output.txt (
  for %%F in (*.log) do (
    <nul set /p "=%%F: "
    for /f %%N in ('type "%%F"^|find /c /v ""') do set /a skip=%%N
    if !skip! gtr 0 set /a skip-=1
    more +!skip! "%%F"
  )
)
type output.txt

我的问题:上面的语法是否可以修改以复制目录中每个* .txt文件的第三行,将每个文件的文件名附加到该行,并将结果发送到新的输出文件?

非常感谢。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
(
 FOR %%f IN (*.log) DO (
  SET output=Y
  FOR /f "usebackqskip=2delims=" %%i IN ("%%f") DO IF DEFINED output (
  SET "output="
  ECHO %%f : %%i
  )
 )
)>output.txt
GOTO :EOF

这将生成包含每个.LOG文件中第三个非空行的输出文件,前面是该文件的名称和冒号。对.txt文件执行相同操作的修复应该是显而易见的。

虽然有一点需要注意 - 创建的输出文件NOT应该与正在处理的文件具有相同的扩展名。

通常情况下,FOR/F会在SKIP ped之后输出每一行。通过在output变量上添加门,在扫描每个目标文件之前将其设置为某个值,然后在第三行ECHO时清除它,只有从每个文件中选择的第一行是{{ 1}}编