如何使用Windows批处理文件循环遍历文本文件中的每一行?

294

我希望知道如何使用Windows批处理文件逐行遍历文本文件,并依次处理每一行的文本。

12个回答

1

在这里修改示例,以在Heroku上列出我们的Rails应用程序 - 谢谢!

cmd /C "heroku list > heroku_apps.txt"
find /v "=" heroku_apps.txt | find /v ".TXT" | findstr /r /v /c:"^$" > heroku_apps_list.txt
for /F "tokens=1" %%i in (heroku_apps_list.txt) do heroku run bundle show rails --app %%i

完整代码请点击这里

根据上面的另一个问题的评论 - 您可以跳过文件创建/读取,只需使用 for /f "tokens=1" %%i in ('find /v "=" heroku_apps.txt ^| find /v ".TXT" ^| findstr /r /v /c:"^$"') do...(请注意添加了 ^ 用于转义管道,以便将其传递给 for 而不是直接传递给命令处理器) - user66001

1
从命令行(使用延迟扩展)打印文本文件中的所有行:
set input="path/to/file.txt"

for /f "tokens=* delims=[" %i in ('type "%input%" ^| find /v /n ""') do (
set a=%i
set a=!a:*]=]!
echo:!a:~1!)

适用于前导空格、空白行、空白行的情况。

在Win 10 CMD上测试过。

Test text


第二个旨在删除空行。如果文本文件中的任何一行以]开头,则第一个可以修改delims,例如用不包含该字符的某个字符或控制字符(如退格或响铃)替换;它们通常不会出现在文本文件中。 delims =]的原因是为了删除由find命令的/n创建的占位符,以保留空行。 - Zimba
@jeb:括号]]]问题已解决。请查看更新,以打印文本文件中的所有行。在Win 10 CMD上也可以工作。 - Zimba
但现在它在文本中出现感叹号时失败,例如 This bang ! disappears。顺便说一下,您不需要 delim=[,因为 set a=!a:*]=]! 也会将其删除,并且 echo:!a:~1! 不是必需的,您可以将替换更改为 set a=!a:*]=! - jeb
calc.exe 的错误取决于您的 Windows 目录以及您在哪个目录中启动代码(相同的驱动器和目录深度),但可以通过使用 echo(!var! 轻松解决。其他问题不容易解决,因为这是延迟扩展行为。 - jeb
calc.exe这一行对我来说没问题,不是bug。关于caret和cd这两行,我用了“,^”以及字符串替换进行修复,但并不保证能够在所有CMD版本中正常工作。 - Zimba
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接