Board logo

标题: [求助]每一个FOR循环都会调用一个CMD.exe? [打印本页]

作者: qinbuer     时间: 2007-9-12 02:44    标题: [求助]每一个FOR循环都会调用一个CMD.exe?

环境:WINDOWS XP SP2

案例1:

@echo off
for /f "delims=" %%i in ('tasklist /nh') do echo %%i
pause

结果发现:两个CMD.EXE进程

案例2:

@echo off
tasklist /nh
pause

结果发现:一个CMD.EXE进程

为什么会出现这样的情况呢?难道每一个FOR循环都需要调用一个CMD.exe,当循环过后调用的进程就会立即退出?

[ Last edited by qinbuer on 2007-9-12 at 02:54 AM ]
作者: ThinKing     时间: 2007-9-12 10:04
这和for没有什么关系,请详细说明你的测试步骤。

我的第一个例子的结果为一个cmd.exe进程。
作者: wudixin96     时间: 2007-9-12 10:50
任务管理器里是只有一个的。

@echo off
for /f "delims=" %%i in ('tasklist /nh') do echo %%i
pause

list出来的列表里有两个cmd
作者: ThinKing     时间: 2007-9-12 11:13
我是这样猜想的:如果for带上/f参数,并且括号里面也是单引号括起来的命令,那么for会启动一个子cmd.exe进程来运行括号里面的命令,因此有了两个cmd.exe进程。

这里只有一个。
@echo off
for /f %%a in ("tasklist /nh") do %%a
pause

作者: qinbuer     时间: 2007-9-13 12:05
我本人没有技术进行再深入的测试,ThinKing兄的回答似乎是最好的解释了。加分表示谢意。
作者: HAT     时间: 2007-9-16 13:11
willsort兄就此做过解释
翻翻以前的帖子应该找的到
for循环启动的那个cmd.exe跟普通的不太一样
作者: titiger     时间: 2007-9-17 09:59
收获了,呵呵