中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-05 21:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]每一个FOR循环都会调用一个CMD.exe? 查看 1,289 回复 6
楼 主 [求助]每一个FOR循环都会调用一个CMD.exe? 发表于 2007-09-12 02:44 ·  中国 广东 广州 电信
高级用户
★★
我思故我在
积分 512
发帖 228
注册 2007-01-21 10:31
19年会员
UID 77225
性别 男
状态 离线
环境: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 ]
我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
2 发表于 2007-09-12 10:04 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
19年会员
UID 87369
性别 男
状态 离线
这和for没有什么关系,请详细说明你的测试步骤。

我的第一个例子的结果为一个cmd.exe进程。
3 发表于 2007-09-12 10:50 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
任务管理器里是只有一个的。

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

list出来的列表里有两个cmd
4 发表于 2007-09-12 11:13 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
19年会员
UID 87369
性别 男
状态 离线
我是这样猜想的:如果for带上/f参数,并且括号里面也是单引号括起来的命令,那么for会启动一个子cmd.exe进程来运行括号里面的命令,因此有了两个cmd.exe进程。

这里只有一个。
@echo off
for /f %%a in ("tasklist /nh") do %%a
pause
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
qinbuer +4 2007-09-13 12:01
knoppix7 +4 2007-09-16 13:16
5 发表于 2007-09-13 12:05 ·  中国 广东 广州 电信
高级用户
★★
我思故我在
积分 512
发帖 228
注册 2007-01-21 10:31
19年会员
UID 77225
性别 男
状态 离线
我本人没有技术进行再深入的测试,ThinKing兄的回答似乎是最好的解释了。加分表示谢意。
我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
6 发表于 2007-09-16 13:11 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
willsort兄就此做过解释
翻翻以前的帖子应该找的到
for循环启动的那个cmd.exe跟普通的不太一样
7 发表于 2007-09-17 09:59 ·  中国 广东 江门 电信
初级用户
积分 30
发帖 15
注册 2007-09-05 21:43
18年会员
UID 96658
性别 男
状态 离线
收获了,呵呵
论坛跳转: