如何在Windows命令提示符中同时启动2个程序

17

我正在使用Windows 7 64位操作系统

以下是我的代码片段:

@echo off
call "C:\Program Files (x86)\LOLReplay\LOLRecorder.exe"
call "G:\League of Legends\lol.launcher.exe"
exit

但是,除非我关闭LOLRecorder.exe,否则它不会启动我的lol.launcher.exe....基本上,我希望两者都在运行,并且cmd提示符在它们启动后退出。这里有什么问题?我查看了另一个stackoverflow答案 这里,但它引用的是与我使用的相同方法。

编辑:

使用start命令它只会启动2个终端窗口,没有任何启动!

@echo off
start "C:\Program Files (x86)\LOLReplay\LOLRecorder.exe"
start "G:\League of Legends\lol.launcher.exe"
exit
7个回答

25

使用“start”命令时,只会启动两个终端窗口,而没有其他动作发生!

问题在于路径中的空格需要加引号(但这一点是必需的)。由于 start 命令似乎不喜欢这些引号,因此出现了问题。

您可以通过使用所有目录的短DOS名称(并删除引号)或单独指定目录并加引号(start 命令可以处理)来解决此问题。

请尝试以下内容:

@echo off
start /d "C:\Program Files (x86)\LOLReplay" LOLRecorder.exe
start /d "G:\League of Legends" lol.launcher.exe

或者,如果你的批处理文件在将来变得更加复杂,或者你的程序名称中包含空格,可以使用以下命令:

@ECHO OFF

CALL :MainScript
GOTO :EOF

:MainScript
  CALL :RunProgramAsync "C:\Program Files (x86)\LOLReplay\LOLRecorder.exe"
  CALL :RunProgramAsync "G:\League of Legends\lol.launcher.exe"
GOTO :EOF

:RunProgramAsync
  REM ~sI expands the variable to contain short DOS names only
  start %~s1
GOTO :EOF

4

开始需要为窗口标题提供参数。 尝试使用以下命令: start "Lolrecorder" "C:\Program Files (x86)\LOLReplay\LOLRecorder.exe" start "Lol-Launcher" "G:\League of Legends\lol.launcher.exe"

这将使通过 start 命令启动的 cmd 窗口具有"Lolrecorder"和"Lol-Launcher"的标题。


2

在命令中指定标题和/c开关,以告诉启动的窗口在其命令完成后关闭。

start "recorder" /c "C:\Program Files (x86)\LOLReplay\LOLRecorder.exe"
start "LOL" /c "G:\League of Legends\lol.launcher.exe"

这个参考文献到目前为止回答了我关于CMD的几乎所有问题。

1

call 仅适用于批处理文件,并等待被调用者返回。您应该使用 start 命令在后台启动程序。作为额外的奖励,您可以为进程指定优先级。如果您需要以另一个用户身份运行某些内容,请使用 runas


@footy:这两个命令中的任何一个(没有“start”)单独执行是否可以正确启动相应的程序,或者你可能缺少一些必要的命令行选项?(哦,不用说“退出”我想。) - Kerrek SB
它们可以独立运行,我不需要提供任何命令行参数来启动这些程序。 - footy

0

有些人可能会对同时检查所有驱动器的正确性感兴趣。这里是一个简单的 .bat 文件:

@echo off
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%a:\ start cmd /c "echo %%a: & chkdsk %%a: & pause"

脚本在检查每个驱动器后等待按键。每个驱动器都有自己的命令窗口。
您应该避免检查和修复(上面只是检查)其中一个驱动器是另一个容器的驱动器(例如,VeraCrypt容器,VHD,VHDX)。

0

这对我有用,使用cmd文件同时启动2个程序而不需要使用start命令。

@echo off
"C:\Users\UserA\AppData\Local\Programs\OP.GG\OP.GG.exe" & "C:\Riot Games\Riot Client\RiotClientServices.exe" --launch-product=league_of_legends --launch-patchline=live
exit

无论如何,“&”后面的命令都将被执行。
@echo off
programA.exe & programB.exe

在“&&”之后的命令只有在“&&”之前的命令成功执行后才会被执行。

@echo off
programA.exe && programB.exe

奇怪,我使用“|”时更成功,但是用“&”对我来说不起作用。 - Patrick Koorevaar

0
我使用了“|”符号,注意只有最后执行的输出会显示在控制台上。
@echo off
Program.exe 50279111 | Program.exe 50279222 | Program.exe 50279333

但是在我的后端程序中,我可以同时看到这三个连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接