3

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

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,就像在这个解决方案中一样,但是我失去了拥有自定义图标的选项(我坚持使用默认的 .vbs 图标)。

4

3 回答 3

4

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 文件然后退出。然后你可以给它一个自定义图标,让它做任何你喜欢的事情。

于 2013-03-05T22:21:18.620 回答
1

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

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

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

于 2013-03-05T22:34:12.900 回答
0

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

状态的文档start

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

于 2017-12-15T10:03:30.683 回答