我有很多文字文件。在那些文件中只有几行感兴趣。我虽然那批处理我的问题会很有效,所以我花了最后两天试图学习那种语言的基础。 基本上我想浏览所有文件(为简单起见,它们在同一个文件夹中),提取我需要的几行,并将它们复制到输出文件中的一行。
到目前为止,我设法:
从一个输出文件中的每个文件中提取所有行
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%
)有解释,那将是最受欢迎的。
答案 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 我正确地解释您的方法......