web-dev-qa-db-fra.com

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

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\"
12
user259671

Voici un exemple utilisant 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)
19
nixda

J'ai implémenté tasklist dans mon script et cela fonctionne comme un charme.
Le voici pour tous ceux qui ont 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\"
3
user259671
@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
3
Santosh

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

(Vous pouvez exécuter Powershell depuis 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 à rechercher l'exécutable, vous pouvez l'exécuter directement, mais la recherche de l'exécutable autorise les mises à jour MS Office, qui peuvent parfois modifier le répertoire d'installation)

0
Nullldata