Batch file 嵌套for循环会导致错误的结果
我对嵌套for循环有一些问题。正如您在结果中所看到的,加载了正确的行,但是第二个循环将行拆分为两个字段,这会导致错误 有什么想法吗 干杯 电流输出Batch file 嵌套for循环会导致错误的结果,batch-file,nested-loops,Batch File,Nested Loops,我对嵌套for循环有一些问题。正如您在结果中所看到的,加载了正确的行,但是第二个循环将行拆分为两个字段,这会导致错误 有什么想法吗 干杯 电流输出 line=user1|pass1 usr: user2 pass: pass2 -------- line=user2|pass2 usr: user2 pass: pass2 -------- user1|pass1 user2|pass2 pass.txt line=user1|pass1 usr: user2 pass:
line=user1|pass1
usr: user2
pass: pass2
--------
line=user2|pass2
usr: user2
pass: pass2
--------
user1|pass1
user2|pass2
pass.txt
line=user1|pass1
usr: user2
pass: pass2
--------
line=user2|pass2
usr: user2
pass: pass2
--------
user1|pass1
user2|pass2
批处理文件
cls
@echo off &setlocal
for /f "tokens=*" %%a in (pass.txt) do (
echo line=%%a
set "string=%%a"
for /f "tokens=1,2 delims=|" %%i in ("%string%") do set "variable1=%%i" &set "variable2=%%j"
echo usr: %variable1%
echo pass: %variable2%
endlocal
set "string="
echo. --------
)
嵌套的
for
循环正常工作
但不起作用的(不是预期的)是变量。在批处理脚本中,每次到达一个块(括号内的行)时,所有变量读取都会在执行之前替换为变量中的值。如果在块内需要访问变量的值,并且该值已在块内分配/更改,则有必要指示变量读取应延迟
所以,您的代码应该是
@echo off & cls
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (pass.txt) do (
echo line=%%a
set "string=%%a"
for /f "tokens=1,2 delims=|" %%i in ("!string!") do set "variable1=%%i" &set "variable2=%%j"
echo usr: !variable1!
echo pass: !variable2!
echo. --------
)
endlocal
setlocal enabledelayexexpansion
激活此功能,并且%var%
引用将(在需要时)替换为!瓦尔
sintax,表示需要延迟读取的变量。如果要避免延迟扩展,可以删除(临时)变量赋值,并立即使用for
变量“%”?“
作为进一步命令的参数:
@echo off & cls
setlocal
for /f "tokens=*" %%a in (pass.txt) do (
echo line=%%a
for /f "tokens=1,2 delims=|" %%i in ("%%a") do (
echo usr: %%i
echo pass: %%j
echo. --------
)
)
endlocal
另一个想法是:对于这种方法,您不需要两个嵌套循环,因为
for
命令能够立即拆分文本文件的每个读取行;试试这个:
@echo off & cls
setlocal
for /f "tokens=1,2 delims=|" %%a in (pass.txt) do (
echo line=%%a^|%%b
echo usr: %%a
echo pass: %%b
echo. --------
)
endlocal
如果您解释您打算做什么,或者所需的输出应该是什么样子,这将有所帮助。