
Ich habe die folgende Batchdatei erstellt und sie funktioniert großartig. Ich würde jedoch gerne wissen, ob es eine Möglichkeit gibt, sie so zu codieren, dass ein bereits laufendes Programm übersprungen und das nächste gestartet wird. Ich hoffe, das ergibt Sinn. Jeder Ratschlag wäre sehr willkommen.
@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\"
Antwort1
Hier ist ein Beispiel mitAufgabenlisteum alle laufenden Anwendungen auf einen bestimmten Namen zu überprüfen.
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)
Antwort2
Ich habe die Taskliste in mein Skript implementiert und sie funktioniert einwandfrei.
Hier ist sie für alle, die dieselben 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\"
Antwort3
@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
Antwort4
Ich bin der Antwort von Nixda gefolgt, was super funktioniert hat. Allerdings hatte ich ein Problem, bei dem immer noch mehrere Kopien meiner Anwendung gestartet wurden!!
Dies lag an der Länge meines EXE-Namens, daher dachte ich, ich würde hier eine optimierte Version von Nixdas Antwort hinzufügen, nur für den Fall, dass andere das gleiche Problem haben.
Wenn Ihr EXE-Name lang ist, z. B. „SomeReallyVerySuperLongProgram.exe“, kürzt die Taskliste ihre Ausgabe. Das bedeutet, dass die Weiterleitung der Ausgabe an den Suchbefehl fehlschlägt und eine zweite Instanz Ihrer Anwendung öffnet.
Zum Beispiel:
Also habe ich anstelle der Taskliste den Befehl wmic verwendet, um herauszufinden, ob der Prozess bereits ausgeführt wurde.
Hier ist meine optimierte Version:
wmic process where "name='win32calc.exe'" get ProcessID | find /i "ProcessId" > nul || (start /min win32calc.exe)