通过命令行启动程序,但前提是程序尚未运行

通过命令行启动程序,但前提是程序尚未运行

我想出了下面的批处理文件,它运行良好。但是,我想知道是否有办法对其进行编码,以便如果程序已经在运行,它会跳过它并启动下一个程序。我希望这有意义。任何建议都将不胜感激。

@echo off    
pushd    
start "" cmd /c cscript "C:\Users\User\Desktop\Work.vbs"    
start "C:\Program Files\Microsoft Office\Office15" Outlook.exe    
start "C:\Program Files\Microsoft Office\Office15" Lync.exe    
start "C:\Program Files (x86)\Google\Chrome\Application" chrome.exe    
runas /savecred /user:"DOMAIN\User_Adm" "C:\Program Files (x86)\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe"    
runas /savecred /user:"DOMAIN\User_Adm" "mmc.exe \"My_Tools.msc\"

答案1

下面是使用的示例任务列表检查给定名称的所有正在运行的应用程序。
否则将启动该程序。我相信您可以根据自己的需要进行调整

tasklist /nh /fi "imagename eq notepad.exe" | find /i "notepad.exe" > nul || (start notepad.exe)

答案2

我将任务列表实现到脚本中,它运行良好。
这里是为其他有和我一样问题的人准备的。

@echo off
pushd
tasklist /nh /fi "imagename eq iexplore.exe" | find /i "iexplore.exe" > nul ||(start Work.vbs)
tasklist /nh /fi "imagename eq outlook.exe" | find /i "outlook.exe" > nul ||(start outlook.exe)
tasklist /nh /fi "imagename eq lync.exe" | find /i "lync.exe" > nul ||(start lync.exe)
tasklist /nh /fi "imagename eq chrome.exe" | find /i "chrome.exe" > nul ||(start chrome.exe)
tasklist /nh /fi "imagename eq VpxClient.exe" | find /i "VpxClient.exe" > nul || runas /savecred /user:"DOMAIN\User_Adm" "C:\Program Files (x86)\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe"
tasklist /nh /fi "imagename eq mmc.exe" | find /i "mmc.exe" > nul || runas /savecred /user:"DOMAIN\User_Adm" "mmc.exe \"My_Tools.msc\"

答案3

@echo off      
tasklist /FI "IMAGENAME eq outlook.exe" | find /i "outlook.exe"      

IF ERRORLEVEL 2 GOTO LOOP2
IF ERRORLEVEL 1 GOTO LOOP1 

:LOOP1 
  start notepad.exe
goto EXIT     

:LOOP1 
  start outlook.exe 
goto EXIT 

:EXIT

答案4

我按照 nixda 的回答做了,效果很好,但是我遇到了一个问题,我的应用程序的多个副本仍然在启动!!

这是因为我的 .exe 名称太长,所以我想我会在这里添加 nixda 答案的调整版本,以防其他人遇到同样的问题。

如果您的 .exe 名称很长,例如:“SomeReallyVerySuperLongProgram.exe”,则任务列表会截断其输出,这意味着当您将输出传送到 find 命令时它会失败并打开应用程序的第二个实例。

例如:

在此处输入图片描述

因此,我没有使用 tasklist,而是使用了 wmic 命令来找出已在运行的进程。

以下是我修改后的版本:

wmic process where "name='win32calc.exe'" get ProcessID | find /i "ProcessId" > nul || (start /min win32calc.exe)

相关内容