透過命令列啟動程序,但前提是尚未運行

透過命令列啟動程序,但前提是尚未運行

我想出了下面的批次文件,它運行得很好。但是,我想知道是否有一種方法可以對其進行編碼,以便如果程式已經在運行,它會跳過它並啟動下一個程式。我希望這是有道理的。任何建議將不勝感激。

@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 命令時,它會失敗並開啟應用程式的第二個實例。

例如:

在此輸入影像描述

因此,我沒有使用任務列表,而是使用 wmic 命令來查找進程是否已運行。

這是我的調整版本:

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

相關內容