Запускайте програми за допомогою командного рядка, але лише якщо вони ще не запущені


13

Я придумав пакетний файл нижче, і він чудово працює. Однак я хотів би знати, чи є спосіб його кодувати так, що якщо програма вже запущена, вона пропустить її та запустить наступну. Сподіваюся, це має сенс. Будь-яка порада буде дуже вдячна.

@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. shellhell - це добре.
Калонь Колоб

Відповіді:


20

Ось приклад використання списку завдань для перевірки всіх запущених програм на задане ім’я.
Інакше він запускає програму. Я впевнений, що ви можете адаптувати це до своїх потреб

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

Переконайтеся, що це все в одному рядку, цей сайт форматує його, щоб він ||перервався на - не порушуйте
CAD

3

Я впровадив у свій сценарій список завдань, і його робота як шарм.
Ось для тих, хто має ті самі запитання, що і я.

@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

Ось версія PowerShell (замість CMD).

(Ви можете запустити powerhell з CMD, зателефонувавши " powershell.exe".

Цей сценарій виконує наступні дії:

  1. Перевіряє список процесів для певного процесу, і якщо процес не знайдений у списку ...
  2. Він буде шукати виконуваний файл у певному місці (наприклад, програмні файли) та запускати його.

У цьому прикладі я запускаю Skype for Business (AKA "lync").

Ось 1 вкладиш:

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

Ось коментована версія:

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

(Вам не потрібно насправді шукати виконуваний файл, ви можете замість цього запустити його безпосередньо. Однак пошук виконуваного файлу дозволяє отримати оновлення MS Office, які іноді можуть змінити каталог встановлення)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.