Mulai program melalui command-line, tetapi hanya jika belum berjalan

13

Saya datang dengan file batch di bawah ini, dan ini bekerja dengan baik. Namun, saya ingin tahu apakah ada cara untuk mengkodekannya sehingga jika suatu program sudah berjalan, ia akan melewatinya dan meluncurkan yang berikutnya. Saya harap ini masuk akal. Saran apa pun akan sangat dihargai.

@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\"
pengguna259671
sumber
1
psst. PowerShell bagus.
Ngarai Kolob

Jawaban:

20

Berikut adalah contoh menggunakan daftar tugas untuk memeriksa semua aplikasi yang berjalan untuk nama yang diberikan.
Kalau tidak, ia akan memulai program. Saya yakin Anda dapat menyesuaikannya dengan kebutuhan Anda

tasklist /nh /fi "imagename eq notepad.exe" | find /i "notepad.exe" > nul ||
(start notepad.exe)
nixda
sumber
Pastikan ini semua dalam satu baris, situs ini memformatnya jadi rusak ||- jangan putus
CAD bloke
3

Saya menerapkan daftar tugas ke dalam skrip saya dan berfungsi seperti pesona.
Ini untuk orang lain yang memiliki pertanyaan yang sama dengan saya.

@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\"
pengguna259671
sumber
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
sumber
1

Ini adalah versi PowerShell (bukan CMD).

(Anda dapat menjalankan PowerShell dari CMD dengan memanggil " powershell.exe".

Script ini melakukan hal berikut:

  1. Periksa daftar proses untuk proses tertentu, dan jika proses tersebut tidak ditemukan dalam daftar ...
  2. Ini akan mencari yang dapat dieksekusi di lokasi tertentu (seperti file program), dan menjalankannya.

Dalam contoh ini, saya memulai Skype for Business (AKA "lync").

Ini adalah 1 liner:

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

Ini adalah versi yang dikomentari:

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

(Anda tidak harus benar-benar mencari yang dapat dieksekusi, Anda dapat menjalankannya secara langsung - namun mencari yang dapat dieksekusi memungkinkan pembaruan MS Office yang terkadang dapat mengubah direktori instal)

Nullldata
sumber