Uruchamiaj programy za pomocą wiersza polecenia, ale tylko wtedy, gdy jeszcze nie są uruchomione

13

Wymyśliłem plik wsadowy poniżej i działa świetnie. Chciałbym jednak wiedzieć, czy istnieje sposób, aby go zakodować, więc jeśli program już działa, pominie go i uruchomi następny. Mam nadzieję, że to ma sens. Wszelkie porady będą mile widziane.

@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\"
użytkownik259671
źródło
1
psst. PowerShell jest dobry.
Kolob Canyon

Odpowiedzi:

20

Oto przykład użycia tasklist do sprawdzenia wszystkich uruchomionych aplikacji dla danej nazwy.
W przeciwnym razie uruchamia program. Jestem pewien, że możesz dostosować go do swoich potrzeb

tasklist /nh /fi "imagename eq notepad.exe" | find /i "notepad.exe" > nul ||
(start notepad.exe)
nixda
źródło
Upewnij się, że wszystko jest w jednym wierszu, ta strona formatuje go, więc łamie się ||- nie łam
CAD bloke
3

Zaimplementowałem tasklist w moim skrypcie i działa jak urok.
Tutaj jest dla każdego, kto ma te same pytania, co ja.

@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\"
użytkownik259671
źródło
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
Santosh
źródło
1

Oto wersja PowerShell (zamiast CMD).

(Możesz uruchomić PowerShell z CMD, dzwoniąc „ powershell.exe”.

Ten skrypt wykonuje następujące czynności:

  1. Sprawdza listę procesów pod kątem określonego procesu, a jeśli proces nie znajduje się na liście ...
  2. Będzie szukać dla pliku wykonywalnego w konkretnym miejscu (jak pliki programów) i uruchom go.

W tym przykładzie uruchamiam Skype dla firm (AKA „lync”).

Oto 1 wkładka:

if (!((Get-Process | select ProcessName).ProcessName | where {$_ -like "*lync*"})){&(where.exe /R "C:\Program Files (x86)\Microsoft Office" "lync.exe")}

Oto skomentowana wersja:

# If there isn't a running process that contains "lync"...
if (!((Get-Process | select ProcessName).ProcessName | where {$_ -like "*lync*"}))
{
    # Find the executable somewhere in program files (x86), and run it.
    &(where.exe /R "C:\Program Files (x86)\Microsoft Office" "lync.exe")
}

(Nie musisz tak naprawdę szukać pliku wykonywalnego, możesz zamiast tego uruchomić go bezpośrednio - jednak wyszukiwanie pliku wykonywalnego pozwala na aktualizacje MS Office, które czasami mogą zmienić katalog instalacyjny)

Nullldata
źródło