使用.bat文件时cmd.exe不会终止

时间:2013-03-05 22:18:13

标签: shell windows-7 cmd switch-statement desktop-shortcut

[上下文:我正在尝试使用相对“开始”路径创建.bat文件的快捷方式,大致描述为herehere。]

cmd.exe支持/c切换。根据文档,这应该导致它“执行命令然后终止。”

但是当命令是.bat文件时,似乎忽略了切换。 例如,如果使用以下目标创建快捷方式(对于普通的非bat命令):

C:\Windows\System32\cmd.exe /c "START /d C:\temp\ notepad.exe test.txt"

一切都按预期工作:记事本打开,控制台(shell)消失。但是如果你用.bat文件替换上面的命令,就像这样:

C:\Windows\System32\cmd.exe /c "START /d C:\temp\ C:\test.bat"

(其中test.bat仅包含“notepad.exe test.txt”)记事本像以前一样打开,但控制台就像一个不受欢迎的朋友一样。为什么?更重要的是,我如何让它消失?

更新:我知道我可以使用wscript,就像this solution一样,但后来我失去了自定义图标的选项(我坚持使用默认的.vbs图标) 。

3 个答案:

答案 0 :(得分:3)

start命令开始批处理文件的新进程。原始cmd.exe然后终止,但离开新进程,因为它正在等待notepad.exe终止而挂起。

将您的bat文件内容更改为:

start "" notepad.exe test.txt

然后您的批处理文件将不会等待记事本退出,然后再继续执行。

要尝试的另一件事:

C:\Windows\System32\cmd.exe /c "START /d C:\temp\ C:\test.bat & exit"

核选项是用您选择的(编译)语言编写一个小程序,启动.bat文件,然后退出。然后你可以给它一个自定义图标,让它做你喜欢的任何事情。

答案 1 :(得分:1)

您还可以从http://autoitscript.com查看自动作为批处理的替代方法。 - Run()命令可以做到这种具有更好可预测性的东西。由于它生成可执行文件,您可以直接从快捷方式链接它。当然,您还可以做更多事情,例如以不同用户身份运行,插入延迟或处理错误,这些都很难用于批处理。

您不需要完整的工具包,只需从下载中获取Aut2EXE文件夹即可。

顺便说一句,在没有UPX压缩的情况下构建你的前任,因为这会导致AV误报。

答案 2 :(得分:0)

我有点晚了,但答案就是这样。

start州的documentation

Syntax
START "title" [/D path] [options] "command" [parameters]  

    If command is an internal cmd command or a batch file then the command  
    processor is run with the /K switch to cmd.exe. This means that the  
    window will remain after the command has been run.

如果start用于执行批处理文件,则打开的cmd实例不会关闭。

您也可以使用call代替 call C:\test.bat