在以下主题中:
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文件的第三行,将每个文件的文件名附加到该行,并将结果发送到新的输出文件?
非常感谢。
答案 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}}编