Programme über die Befehlszeile starten, aber nur, wenn sie noch nicht ausgeführt werden

13

Ich habe die Batch-Datei unten gefunden und sie funktioniert hervorragend. Ich würde jedoch gerne wissen, ob es eine Möglichkeit gibt, das Programm so zu codieren, dass es, wenn es bereits ausgeführt wird, überspringt und das nächste Programm startet. Ich hoffe das macht Sinn. Jeder Rat wäre sehr dankbar.

@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\"
user259671
quelle
1
psst. Powershell ist gut.
Kolob Canyon

Antworten:

20

In diesem Beispiel wird mithilfe der Jobliste überprüft, ob alle Anwendungen für einen bestimmten Namen ausgeführt werden.
Andernfalls wird das Programm gestartet. Ich bin sicher, Sie können es an Ihre Bedürfnisse anpassen

tasklist /nh /fi "imagename eq notepad.exe" | find /i "notepad.exe" > nul ||
(start notepad.exe)
Nixda
quelle
Stellen Sie sicher, dass dies alles in einer Zeile ist. Diese Site formatiert es so, dass es abbricht ||- nicht abbricht
CAD-Typ
3

Ich habe Tasklist in mein Skript implementiert und es funktioniert wie ein Zauber.
Hier ist es für alle anderen, die die gleichen Fragen haben wie ich.

@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\"
user259671
quelle
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
quelle
1

Hier ist eine PowerShell-Version (anstelle von CMD).

(Sie können Powershell von CMD aus ausführen, indem Sie " powershell.exe" aufrufen .

Dieses Skript führt Folgendes aus:

  1. Überprüft die Prozessliste auf einen bestimmten Prozess und wenn der Prozess nicht in der Liste gefunden wird ...
  2. Es wird nach der ausführbaren Datei an einem bestimmten Speicherort (z. B. Programmdateien) gesucht und ausgeführt.

In diesem Beispiel starte ich Skype for Business (AKA "lync").

Hier ist ein 1-Liner:

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

Hier ist eine kommentierte Version:

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

(Sie müssen nicht unbedingt nach der ausführbaren Datei suchen, sondern können sie auch direkt ausführen. Die Suche nach der ausführbaren Datei ermöglicht jedoch MS Office-Updates, die manchmal das Installationsverzeichnis ändern können.)

Nullldata
quelle