Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 嵌套for循环会导致错误的结果_Batch File_Nested Loops - Fatal编程技术网

Batch file 嵌套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:

我对嵌套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:  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

如果您解释您打算做什么,或者所需的输出应该是什么样子,这将有所帮助。