提取多个文本文件中的一些行

时间:2017-02-02 12:01:27

标签: batch-file command-line

我有很多文字文件。在那些文件中只有几行感兴趣。我虽然那批处理我的问题会很有效,所以我花了最后两天试图学习那种语言的基础。 基本上我想浏览所有文件(为简单起见,它们在同一个文件夹中),提取我需要的几行,并将它们复制到输出文件中的一行。

到目前为止,我设法:

从一个输出文件中的每个文件中提取所有行

FOR %%f IN (*.whl) DO FOR /F "delims=|" %%l in (%%f) DO echo %%l >> output.txt

从一个文件中提取我想要的行(5和10)

(FOR /L %%i IN (1,1,5) DO SET /P line1=) < file.txt
(FOR /L %%i IN (1,1,10) DO SET /P line2=) < file.txt
>> output.txt ECHO %line1% %line2%

现在我尝试将前两个代码组合在一起:

该代码为我提供了第一个文件的正确输出,但没有循环遍历所有文件。如果我在块goto nxt_file的末尾添加:extract_lines,则只会再次执行第一个文件。

:nxt_file
FOR %%f IN (*.whl) DO (
    set outfile=%%f
    goto extract_lines)

:extract_lines
(FOR /L %%i IN (1,1,5) DO SET /P line1=) < %file%
(FOR /L %%i IN (1,1,10) DO SET /P line2=) < %file%
>> output.txt ECHO %line1% %line2% 

该代码循环但无法在输出中复制我想要的行。

FOR %%f IN (*.whl) DO (
    (FOR /L %%i IN (1,1,5) DO SET /P line1=) < %%f
    (FOR /L %%i IN (1,1,10) DO SET /P line2=) < %%f

    ECHO %line1% %line2%  >>  output.txt 
)

但是,如果我更改它,添加set file=%%f并将< %%f替换为< %file%它就不会运行。

顺便说一下,我使用了this method,但效果不错,但我想知道我是否可以使用目前使用的方法对其进行排序。

感谢您的帮助!

编辑:你可以看到这是我的第一篇文章,也是我用这种语言的第一步。我欢迎提出任何建议来提出这个问题,也许未来的问题会更加详细,因为我可能无法感知与高级用户相关的所有信息。

感谢@Magoo我的问题已经解决了,但我会对任何建议更好地使这些代码感兴趣(我想有一种更有效的方法来选择我需要的行而不是使用FOR /L和经过每一行直到正确的一行)。

此外,如果任何人对我所描述的不同问题(例如< %%f而不是< %file%)有解释,那将是最受欢迎的。

2 个答案:

答案 0 :(得分:1)

您可以使用For在一个FindStr循环中完成所有操作。

@Echo Off
>outfile.txt (For /F "Tokens=2* Delims=:" %%A In ('FindStr/N "^" *.whl'
) Do If "%%A"=="5" (Set "_=%%B") Else If "%%A"=="10" (Call Echo=%%_%% %%B))

答案 1 :(得分:0)

对我来说似乎是一个XY问题(IOW - 尝试修复方法,而不是问题)

(由于缺乏细节,这是未经测试的,因为必须如此)

FOR %%f IN (*.whl) DO (
 (FOR /L %%i IN (1,1,5) DO SET /P line1=) < %%f
 (FOR /L %%i IN (1,1,10) DO SET /P line2=) < %%f
 >> output.txt CALL ECHO %%line1%% %%line2%%
)

应该找到每个*.whl文件,将名称分配给%%f,然后将该文件中的前5行读取到line1,将前10行读取到line2,这五个变量中的第五行和第十行,然后将输出累积到output.txt

IF 我正确地解释您的方法......