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

时间:2020-03-06 14:57:28  来源:igfitidea点击:

我想知道如何使用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。