Avvia i programmi dalla riga di comando, ma solo se non è già in esecuzione


13

Ho trovato il file batch qui sotto e funziona alla grande. Tuttavia, vorrei sapere se esiste un modo per codificarlo in modo che se un programma è già in esecuzione, lo salterebbe e avvierebbe il prossimo. Spero che abbia senso. Qualsiasi consiglio sarebbe molto apprezzato.

@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
Psst. PowerShell è buono.
Kolob Canyon,

Risposte:


20

Ecco un esempio che utilizza l' elenco delle attività per controllare tutte le applicazioni in esecuzione per un determinato nome.
Altrimenti avvia il programma. Sono sicuro che puoi adattarlo alle tue esigenze

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

Assicurati che sia tutto su una riga, questo sito lo formatta in modo che si rompa a ||- non romperlo
Bloke CAD

3

Ho implementato la lista delle attività nella mia sceneggiatura e funziona come un incantesimo.
Qui è per chiunque abbia le stesse domande che avevo.

@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

1

Ecco una versione di PowerShell (anziché CMD).

(È possibile eseguire PowerShell da CMD chiamando " powershell.exe".

Questo script esegue le seguenti operazioni:

  1. Controlla l'elenco dei processi per un processo specifico e se il processo non viene trovato nell'elenco ...
  2. Si ricerca per l'eseguibile in una posizione specifica (come file di programma), ed eseguirlo.

In questo esempio, sto avviando Skype for Business (AKA "lync").

Ecco un 1 liner:

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

Ecco una versione commentata:

# 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")
}

(Non devi effettivamente cercare l'eseguibile, puoi invece eseguirlo direttamente, tuttavia la ricerca dell'eseguibile consente aggiornamenti di MS Office che a volte possono cambiare la directory di installazione)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.