Lancez les programmes via la ligne de commande, mais uniquement si vous ne les exécutez pas déjà

12

Je suis venu avec le fichier batch ci-dessous, et cela fonctionne très bien. Cependant, j'aimerais savoir s'il existe un moyen de le coder afin que, si un programme est déjà en cours d'exécution, il l'ignore et lance le suivant. J'espère que cela a du sens. Tout avis serait grandement apprécié.

@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\"
utilisateur259671
la source
psst. Powershell est bon.
Kolob Canyon

Réponses:

19

Voici un exemple d'utilisation de tasklist pour vérifier toutes les applications en cours d'exécution pour un nom donné.
Sinon, le programme est lancé. Je suis sûr que vous pouvez l'adapter à vos besoins

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

J'ai implémenté tasklist dans mon script et cela fonctionne comme un charme.
Ici, c'est pour quiconque ayant les mêmes questions que moi.

@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\"
utilisateur259671
la source
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
la source
0

Voici une version de PowerShell (au lieu de CMD).

(Vous pouvez exécuter Powershell à partir de CMD en appelant " powershell.exe".

Ce script a les effets suivants:

  1. Vérifie la liste de processus pour un processus spécifique, et si le processus ne se trouve pas dans la liste ...
  2. Il recherchera l'exécutable dans un emplacement spécifique (comme les fichiers de programme) et l'exécutera.

Dans cet exemple, je lance Skype for Business (AKA "lync").

Voici un 1 liner:

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

Voici une version commentée:

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

(Vous n'avez pas besoin de rechercher l'exécutable, vous pouvez plutôt l'exécuter directement. Toutefois, la recherche de l'exécutable autorise les mises à jour MS Office, qui peuvent parfois modifier le répertoire d'installation.)

Nullldata
la source