[上下文:我正在尝试使用相对“开始”路径创建.bat文件的快捷方式,大致描述为here和here。]
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图标) 。
答案 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