我有点为难:当我想同时启动一个程序和另一个程序时,我通常的做法是制作一个如下的批处理文件:
@ echo off
start exe1.exe
start exe2.exe
exit
我编译了批处理文件,然后将原始程序重命名为,exe1.exe
并将(编译的)批处理文件重命名为原始程序的名称(以保持快捷方式正常工作)。不幸的是,我现在需要同时启动一个程序和 cmd。修改 cmd 本身似乎是不可能的,我不想陷入编写多线程程序来监视当前正在运行的进程的困境。有人有什么建议吗?我本来想使用任务调度程序,但我不知道该怎么用它……谢谢!我使用的是 Win 7,我真的不想在这里安装比我需要的更多的第三方软件……
注意:这不能只是一个启动 cmd 然后启动另一个程序的程序。每次打开 cmd 时,这个程序也需要打开。即使进入C:\Windows\System32
并手动运行它也会导致我的其他程序运行。
答案1
来自 CMD.EXE 帮助:
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
...
/D Disable execution of AutoRun commands from registry (see below)
...
If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
and/or
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
因此您应该能够使用命令创建注册表项来启动您的程序。
答案2
是的,篡改%windir%\system32\cmd.exe
很危险。您愿意修改用于运行的快捷方式cmd
吗?
如果你输入cmd /?
,你将收到一条使用信息,其中包括:
命令 [其他选择…] [[/S] [/C | /K]字符串] /C 执行字符串指定的命令然后终止 /K 执行字符串指定的命令,但保留 /S 修改 /C 或 /K 之后的字符串处理(见下文)
(下面进一步讨论如何/S
修改命令字符串中引号的解释)。
因此,如果你创建一个快捷方式,其目标框显示类似
%windir%\system32\cmd.exe /k "%ProgramFiles%\Windows NT\Accessories\wordpad.exe"
然后,每次调用该快捷方式时,它都会启动命令提示符,并且将cmd
启动写字板进程(然后发出提示,并像往常一样从终端读取命令)。正如您的问题中所述,您可能需要start
在命令字符串后包含cmd.exe /k
。
答案3
请尝试使用任务计划程序来实现此目的。步骤如下。
打开任务计划程序 >“操作”选项卡 >“创建任务”>“命名任务”>“转到触发器”选项卡 > 单击“新建”> 从“日志”下拉菜单中选择“在事件时”> 打开 cmd 时输入其来源和事件 ID >“转到操作”选项卡 > 输入要启动的其他程序的路径。
希望这可以帮助。
答案4
我可能不明白这个问题,但我只是将其作为标准批处理文件(未编译)发送,它就起作用了。
@ echo off start exe1.exe start cmd exit
它与我的测试应用程序同时打开了一个新的 cmd 窗口。(我使用了与 exe1.exe 不同的东西)。
cmd shell 可以打开一个新的 cmd shell。