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


当前回答

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

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

其他回答

在批处理文件中,您必须使用%%而不是%:(键入help for)

for /F "tokens=1,2,3" %%i in (myfile.txt) do call :process %%i %%j %%k
goto thenextstep
:process
set VAR1=%1
set VAR2=%2
set VAR3=%3
COMMANDS TO PROCESS INFORMATION
goto :EOF

它的作用: for命令末尾的“do call:process %%i %%j %%k”将for命令从myfile.txt中获取的信息传递给“process”“子例程”。

当您在批处理程序中使用for命令时,您需要为变量使用双%符号。

下面几行将这些变量从for命令传递给进程“子例程”,并允许您处理这些信息。

set VAR1=%1
 set VAR2=%2
 set VAR3=%3

我有一些非常高级的使用这个确切的设置,如果需要更多的例子,我愿意分享。当然,根据需要添加您的EOL或Delims。

我需要把整条线作为一个整体来处理。以下是我发现有效的方法。

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

带有星号(*)的tokens关键字将提取整行的所有文本。如果你不加星号,它只会拉出一行中的第一个单词。我想这和空格有关。

在TechNet上的命令


如果文件路径中有空格,则需要使用usebackq。为例。

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

改进第一个“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---

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

修改示例在这里列出我们的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

完整代码在这里。