我需要搜索文件并获得一些结果但是使用新窗口。
如果我在没有START命令的情况下运行“for”循环,我会得到正确的结果,但是当我在新窗口中打开该过程时,结果是错误的。
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
答案 0 :(得分:0)
在bat文件中使用FOR循环时,需要将%%加倍。从命令行(这是你的情况......因为你正在启动一个新的CMD.exe实例)只使用单个%。将%% a的出现次数更改为%a,将%% b更改为%b,它将起作用。
答案 1 :(得分:0)
我不确定你的期望。
可能性1) - 您希望ECHO语句在父批处理脚本中运行,显示在另一个窗口中运行的FOR / F命令的结果。
这根本无法完成。您不能在一个窗口中执行FOR命令,并在另一个窗口中处理迭代(DO部分)。
此外,如果您设法在另一个窗口中运行整个FOR循环,则您设置的任何变量都将与您的父批处理环境完全分开。您的父批处理脚本无法访问其他窗口中的变量。
可能性2) - 您希望所有内容(包括ECHO语句)在新窗口中运行。
这是可能的,但很尴尬,也可能会有问题,具体取决于文件内容。
你必须把整个"脚本"作为单个行,作为参数传递给CMD / C命令。引用和转义很快就会变得棘手。整行将在一次传递中解析,因此您需要子窗口使用延迟扩展。但是,如果启用了延迟扩展且内容包含!
,FOR循环将损坏内容。您无法在循环内切换延迟扩展ON和OFF,因为新窗口具有命令行上下文,而不是批处理,因此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"