2013-04-30 42 views
1

在以下主题:批次的多个文本文件第三行复制到一个新的文本文件和原始文件名附加到每行

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
@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会在输出后的每一行输出。通过在output变量上添加门,在每个目标文件被扫描之前将其设置为某个值,然后在第三行为ECHO ed时将其清除,只有从每个文件中选择的第一行是echo ed。

+0

非常好。这很好,彼得,我完全明白为什么。非常感谢你的创意解决方案。 – 2013-04-30 22:17:36

相关问题