我想知道如何循环通过文本文件中的每一行使用Windows批处理文件和处理每行文本相继。


当前回答

或者,你可以排除引号中的选项:

FOR /F %%i IN (myfile.txt) DO ECHO %%i

其他回答

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

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

完整代码在这里。

从命令行打印文本文件中的所有行(使用delayeexpansion):

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!)

适用于前导空白、空行、空白行。

在win10 CMD上测试

改进第一个“FOR /F..”的答案: 我要做的是调用执行MyList.txt中列出的每个脚本,所以它对我有用:

for /F "tokens=*" %A in  (MyList.txt) do CALL %A ARG1

——或者,如果你想在多行上做:

for /F "tokens=*" %A in  (MuList.txt) do (
ECHO Processing %A....
CALL %A ARG1
)

编辑:上面给出的例子是从命令提示符执行for循环;在批处理脚本中,需要添加一个额外的%,如下所示:

---START of MyScript.bat---
@echo off
for /F "tokens=*" %%A in  ( MyList.TXT) do  (
   ECHO Processing %%A.... 
   CALL %%A ARG1 
)
@echo on
;---END of MyScript.bat---

@ kraus先生的回答很有启发性。另外,如果您想加载与批处理文件位于同一目录中的文件,请在文件名前加上%~dp0。这里有一个例子:

cd /d %~dp0
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A

注意:如果你的文件名或目录(例如上面例子中的myfile.txt)有一个空格(例如:'my file.txt'或'c:\程序文件'),使用:

for /F "tokens=*" %%A in ('type "my file.txt"') do [process] %%A

,使用type关键字调用type程序,该程序显示文本文件的内容。如果您不想承受调用type命令的开销,您应该将目录更改为文本文件的目录。注意,带空格的文件名仍然需要type。

我希望这能帮助到一些人!

如果你有NT-family的Windows(使用cmd.exe作为shell),试试FOR /F命令。