コマンドラインからプログラムを起動しますが、まだ実行されていない場合のみ


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
ちょっと PowerShellは良いです。
コロブキャニオン

回答:


20

タスクリストを使用して、実行中のすべてのアプリケーションで特定の名前を確認する例を次に示します。
それ以外の場合は、プログラムを開始します。ニーズに合わせて調整できると確信しています

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

必ずこれはすべて1行で、それはそれはで壊れるように、このサイトのフォーマットがされていることを確認||-それを壊さない
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

これは(CMDではなく)PowerShellバージョンです。

(「powershell.exe」を呼び出すことにより、CMDからPowerShellを実行できます。

このスクリプトは次のことを行います。

  1. 特定のプロセスのプロセスリストをチェックし、プロセスがリストに見つからない場合...
  2. 特定の場所(プログラムファイルなど)で実行可能ファイルを検索し、実行します。

この例では、Skype for Business(別名「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の更新が可能になり、インストールディレクトリが変更される場合があります)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.