Khởi động chương trình qua dòng lệnh, nhưng chỉ khi chưa chạy


13

Tôi đã đưa ra các tập tin lô dưới đây, và nó đang hoạt động rất tốt. Tuy nhiên, tôi muốn biết liệu có cách nào để mã hóa nó để nếu một chương trình đang chạy, nó sẽ bỏ qua nó và khởi chạy chương trình tiếp theo. Tôi hy vọng điều này có ý nghĩa. Bất kỳ lời khuyên sẽ được đánh giá rất cao.

@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. quyền hạn là tốt.
Hẻm núi Kolob

Câu trả lời:


20

Dưới đây là một ví dụ sử dụng danh sách tác vụ để kiểm tra tất cả các ứng dụng đang chạy cho một tên cụ thể.
Nếu không thì nó khởi động chương trình. Tôi chắc rằng bạn có thể thích ứng nó với nhu cầu của bạn

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

Hãy chắc chắn rằng đây là tất cả trên một dòng, trang web này định dạng nó để nó phá vỡ tại ||- đừng phá vỡ nó
CAD bloke

3

Tôi thực hiện danh sách nhiệm vụ vào kịch bản của mình và nó hoạt động như một cơ duyên.
Đây là cho bất cứ ai khác có cùng câu hỏi như tôi đã có.

@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

Đây là phiên bản PowerShell (thay vì CMD).

(Bạn có thể chạy powershell từ CMD bằng cách gọi " powershell.exe".

Kịch bản này thực hiện như sau:

  1. Kiểm tra danh sách quy trình cho một quy trình cụ thể và nếu quy trình không được tìm thấy trong danh sách ...
  2. Nó sẽ tìm kiếm tệp thực thi ở một vị trí cụ thể (như tệp chương trình) và chạy nó.

Trong ví dụ này, tôi đang bắt đầu Skype for Business (AKA "lync").

Đây là 1 lớp lót:

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

Đây là một phiên bản nhận xét:

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

(Bạn không thực sự phải tìm kiếm tệp thực thi, thay vào đó bạn có thể chạy trực tiếp - tuy nhiên việc tìm kiếm tệp thực thi cho phép cập nhật MS Office đôi khi có thể thay đổi thư mục cài đặt)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.