如何使用Windows批处理文件在文本文件的每一行中循环?
我想知道如何使用Windows批处理文件循环遍历文本文件中的每一行并依次处理文本的每一行。
解决方案
如果我们使用的是Windows家族的Windows(带有cmd.exe
的Windows),请尝试使用FOR / F命令。
从Windows命令行参考:
要解析文件而忽略注释行,请键入:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
此命令将解析Myfile.txt中的每一行,而忽略以分号开头的行,并将第二和第三令牌从每一行传递到FOR正文(令牌由逗号或者空格分隔)。 FOR语句的主体引用%i获取第二个令牌,%j获取第三个令牌,%k获取所有剩余的令牌。
如果我们提供的文件名包含空格,请在文本周围使用引号(例如,"文件名")。要使用引号,必须使用usebackq。否则,引号将被解释为定义要解析的文字字符串。
顺便说一下,我们可以在大多数Windows系统上找到以下命令行帮助文件:
"C:\WINDOWS\Help\ntcmds.chm"
这是我为执行文件夹中的所有SQL脚本而编写的bat文件:
REM ****************************************************************** REM Runs all *.sql scripts sorted by filename in the current folder. REM To use integrated auth change -U <user> -P <password> to -E REM ****************************************************************** dir /B /O:n *.sql > RunSqlScripts.tmp for /F %%A in (RunSqlScripts.tmp) do osql -S (local) -d DEFAULT_DATABASE_NAME -U USERNAME_GOES_HERE -P PASSWORD_GOES_HERE -i %%A del RunSqlScripts.tmp
下面的帖子提供了很大的帮助,但没有执行我在问题中所说的,我需要将整个生产线作为一个整体进行处理。这是我发现可以工作的地方。
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 %%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。