使用 "START" 在新的 window 中使用 "for" 循环
Use "for" loop inside a new window using "START"
我需要搜索一个文件并获得一些结果,但使用的是新的 window。
如果我 运行 没有 START 命令的 "for" 循环得到正确的结果,但是当我在一个新的 windows 中打开进程时,结果是错误的。
Start "" /Min Cmd.exe /C For /f "tokens=1,2,3" %%a in (file.txt) do (
set value1=%%a
set value2=%%b
)
echo. %value1%
echo. %value2%
这是我得到的结果:
%a
%b
当您在 bat 文件中使用 FOR 循环时,您需要将 %% 加倍。从命令行(这是你的情况......因为你正在启动 CMD.exe 的新实例)仅使用单个 %。将出现的 %%a 更改为 %a,将 %%b 更改为 %b,它将起作用。
我不确定你期望什么。
可能性 1) - 您希望 ECHO 语句在父批处理脚本中 运行,显示 FOR /F 命令的结果 运行 在另一个 window.
这根本做不到。您不能在一个 window 中执行 FOR 命令,而在另一个 window.
中处理迭代(DO 部分)
此外,如果您设法 运行 另一个 window 中的整个 FOR 循环,您设置的任何变量都将完全独立于父批处理环境。您的父批处理脚本将无法访问其他 window.
的变量
可能性 2) - 您希望新的 Window.
中的所有内容(包括 ECHO 语句)运行
这是可能的,但很笨拙,而且根据文件内容也可能会出现问题。
您必须将整个 "script" 作为单行作为参数传递给 CMD /C 命令。引用和转义很快就会变得棘手。整行将在一次传递中被解析,因此您需要子 window 来使用延迟扩展。但是,如果启用了延迟扩展并且内容包括 !
,FOR 循环将破坏内容。您不能在循环内打开和关闭延迟扩展,因为新的 window 具有命令行上下文,而不是批处理,因此 SETLOCAL ENABLEDELAYEDEXPANSION 命令不起作用。
我看不出这有什么可能的用途,但以下将 运行,但包含 !
的值将被破坏。我必须添加一个 PAUSE 命令,以便您有机会看到输出。
start "" /min cmd.exe /v:on /c "(for /f "tokens=1,2" %%a in (file.txt) do @set "value1=%%a"&set "value2=%%b")&echo(!value1!&echo(!value2!&pause"
我需要搜索一个文件并获得一些结果,但使用的是新的 window。
如果我 运行 没有 START 命令的 "for" 循环得到正确的结果,但是当我在一个新的 windows 中打开进程时,结果是错误的。
Start "" /Min Cmd.exe /C For /f "tokens=1,2,3" %%a in (file.txt) do (
set value1=%%a
set value2=%%b
)
echo. %value1%
echo. %value2%
这是我得到的结果:
%a
%b
当您在 bat 文件中使用 FOR 循环时,您需要将 %% 加倍。从命令行(这是你的情况......因为你正在启动 CMD.exe 的新实例)仅使用单个 %。将出现的 %%a 更改为 %a,将 %%b 更改为 %b,它将起作用。
我不确定你期望什么。
可能性 1) - 您希望 ECHO 语句在父批处理脚本中 运行,显示 FOR /F 命令的结果 运行 在另一个 window.
这根本做不到。您不能在一个 window 中执行 FOR 命令,而在另一个 window.
中处理迭代(DO 部分)此外,如果您设法 运行 另一个 window 中的整个 FOR 循环,您设置的任何变量都将完全独立于父批处理环境。您的父批处理脚本将无法访问其他 window.
的变量可能性 2) - 您希望新的 Window.
中的所有内容(包括 ECHO 语句)运行这是可能的,但很笨拙,而且根据文件内容也可能会出现问题。
您必须将整个 "script" 作为单行作为参数传递给 CMD /C 命令。引用和转义很快就会变得棘手。整行将在一次传递中被解析,因此您需要子 window 来使用延迟扩展。但是,如果启用了延迟扩展并且内容包括 !
,FOR 循环将破坏内容。您不能在循环内打开和关闭延迟扩展,因为新的 window 具有命令行上下文,而不是批处理,因此 SETLOCAL ENABLEDELAYEDEXPANSION 命令不起作用。
我看不出这有什么可能的用途,但以下将 运行,但包含 !
的值将被破坏。我必须添加一个 PAUSE 命令,以便您有机会看到输出。
start "" /min cmd.exe /v:on /c "(for /f "tokens=1,2" %%a in (file.txt) do @set "value1=%%a"&set "value2=%%b")&echo(!value1!&echo(!value2!&pause"