中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]explorer进程的特殊性
楼 主 [讨论]explorer进程的特殊性 发表于 2006-06-20 10:25 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
To All:

前日,完成一个对文件夹进行处理的批处理代码。其中有一段代码意图使用资源浏览器打开操作后的文件夹,待用户确认无误关闭该文件夹的浏览器窗口后,执行后续的处理操作。代码如下:

但结果发现,start /w “并未起到其应有的作用”,也就是说,在打开test文件夹之后,未等待其关闭,就已经输出Program is finished.和return errorlevel: 0了,其它后续操作也被依次执行,直至该文件夹被删除后,浏览器窗口被自动关闭。

当然,在这里我不主张去怀疑 start/w 是否存在什么Bug,而是去思考资源浏览器的explorer进程是否有什么特殊性,使其影响了 start/w 的表现。


md test
:: other codes
start /w test & echo Program is finished.
:: return errorlevel: 0
::start /w explorer test & echo Is finished.
:: return errorlevel: 1
echo return errorlevel: %errorlevel%
:: other codes


[ Last edited by willsort on 2006-6-20 at 11:17 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2 发表于 2006-06-20 10:40 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用
程序终止就返回命令提示。如果在命令脚本内执行,该新行为
则不会发生。

以上是START命令帮助中写到的.............
3 发表于 2006-06-20 10:44 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
噢,SORRY,wil说的是,我刚才没有试验其他程序,确实,其他程序是等待其窗口才继续执行,EXPLORER.EXE确不是,有待考虑........
4 发表于 2006-06-20 10:48 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
本人觉得EXPLORER打开目录的动作,只要打开了就结束进程从而继续执行程序的,而其他程序例如执行SOL.EXE纸牌程序,用START执行的时候是挂起状态所以不会继续执行,EXPLORER只是一个执行动作,而这个动作结束后就会继续执行脚本以下的命令,打开TEST目录则是最终结果。
5 发表于 2006-06-20 10:51 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re bagpipe(2楼):

这个信息似乎不能说明什么。

一者,我确是在命令脚本中执行的,但该行为仍然发生了;

二者,对于同样是 32-位 GUI 应用程序的notepad和calc之流,他们仍然受着start/w的影响,无论在命令行还是在批处理;

三者,即使在脚本中,未使用/w调用notepad或者calc,也仍然是未等关闭便返回了;只是,是否返回命令提示,那要看脚本是否在命令行中运行,以及是否完成运行。

Re bagpipe(4楼):

兄提到了“挂起”,这让我想起,explorer作为Windows的外壳通常是不应被挂起的,否则桌面操作将无法保证。

但是,我们的start test并未开启新的explorer进程,而只是在explorer进程内增加了一个test线程,这与新建进程的32位程序和不新建进程和线程的内部命令都不太相同。

所以,我们的立足点仍是要寻找explorer有什么特殊性,尤其是在进程或线程状态上有什么特殊性。

[ Last edited by willsort on 2006-6-20 at 11:01 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
6 发表于 2006-06-20 11:00 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  请大家小心,Willsort编了一段病毒代码

  情况是这样的:当我把这段代码copy下来之后,放到单独的批处理中运行之后,立马弹出了上百个CMD窗口,不断提示"子目录或者文件 test 已经存在",搞得我手忙脚乱,好不容易终止了CMD进程,后来在每句执行语句后加上了一个pause来单步执行,截取到的屏幕如下所示。

  后来发现,无论start是否起用参数 /w ,都会出现这个问题,而去掉start /w之后,则不会打开test,而用explorer test语句,则可以顺利打开。

  既然是这样,是否可以这样推断:在CMD的默认设置中,文件夹和资源管理器并没有关联起来,所以要指定文件夹的打开方式?
附件
error.gif
7 发表于 2006-06-20 11:06 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re namejm:

应该是把代码存到 test.cmd 或者 test.bat 中的问题,兄以前似乎有过同样的同名错误。

文件与文件夹与对应程序的关联与CMD无关,而是在注册表的相应键值中,因为文件夹并非像.txt那样,采用扩展名间接关联,所以CMD无法识别。

[ Last edited by willsort on 2006-6-20 at 11:14 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
8 发表于 2006-06-20 11:10 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
我猜是namejm兄目录中有个TEST.BAT或者TEST.CMD的批处理程序,呵呵 ...........
9 发表于 2006-06-20 11:14 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
EXPLORER参数TAG:技术文章
使用命令行参数,您既可以自定义 Windows 资源管理器启动时使用的默认视图,也可以指定在从命令提示符启动时所看到的视图。

您可以在 Explorer.exe 命令中使用以下参数。

参数 结果
/n 为默认选择内容打开一个新的单窗格窗口。
默认选择内容通常是安装 Windows 的驱动器的根目录。
/e 使用默认视图启动 Windows 资源管理器。
/e, <object> 使用默认视图启动 Windows 资源管理器并把焦点定位在指定文件夹上。
/root, <object> 打开指定对象的一个窗口视图。
/select, <object> 打开一个窗口视图,指定的文件夹、文件或
程序被选中。


回到顶端

从命令提示符下运行 Windows 资源管理器
若要从命令提示符下运行 Windows 资源管理器,请: 1. 单击开始,然后单击运行。
2. 在打开框中,键入 Explorer,然后单击确定。

示例
以下示例说明了 Windows 资源管理器参数的用法。 ? Explorer /n
此命令使用默认设置打开一个资源管理器窗口。显示的内容通常是安装 Windows 的驱动器的根目录。
? Explorer /e
此命令使用默认视图启动 Windows 资源管理器。
? Explorer /e,C:\Windows
此命令使用默认视图启动 Windows 资源管理器,并把焦点定位在 C:\Windows。
? Explorer /root, C:\Windows\Cursors
此命令启动 Windows 资源管理器后焦点定位在 C:\Windows\Cursors folder。此示例使用 C:\Windows\Cursors 作为 Windows 资源管理器的“根”目录。

备注:请注意命令中“/root”参数后面的逗号。
? Explorer /select, C:\Windows\Cursors\banana.ani
此命令启动 Windows 资源管理器后选定“C:\Windows\Cursors\banana.ani”文件。

备注£o请注意命令中“/select”参数后面的逗号。
Windows 资源管理器参数可以在一个命令中进行组合。以下示例显示了 Windows 资源管理器命令行参数的组合。 ? Explorer /root, \\server\share, select, Program.exe
此命令启动 Windows 资源管理器时以远程共享作为“根”文件夹,而且 Program.exe 文件将被选中。

回到顶端

更改 Windows 资源管理器默认启动文件夹
若要更改 Windows 资源管理器的默认启动文件夹,请: 1. 单击开始,指向所有程序,指向附件,然后右键单击Windows Explorer。
2. 在出现的菜单上,单击属性。
3. 在“目标”框中,将“/root”命令行参数附加到“%SystemRoot%\Explorer.exe”命令之后,并使用您希望的启动位置。例如,如果您希望 Windows 资源管理器启动后定位在 C 驱动器的根,则请将该命令编辑为:
%SystemRoot%\Explorer.exe /root, C:\


偶也顺便提供一下EXPLORER的参数吧,呵呵
10 发表于 2006-06-20 11:20 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  呵呵,确实是把文件名写成test.bat了,习惯问题,哎,见笑了。
11 发表于 2006-06-21 14:12 ·  IANA 局域网IP(Private-Use)
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
因为explorer是常驻内存的~~~运行批处理前 先 开始 ---> 关闭计算机 然后Ctrl+Alt+Shift+点击取消 把explorer关了

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
12 发表于 2010-12-04 15:36 ·  中国 广东 东莞 电信
新手上路
积分 14
发帖 13
注册 2010-12-01 15:41
UID 178657
性别 男
状态 离线
一知半解、、、
论坛跳转: