通过命令行启动程序,但前提是尚未运行


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。powershell很好。
Kolob峡谷

Answers:


20

这是一个使用任务列表检查给定名称的所有正在运行的应用程序的示例。
否则,它将启动程序。我确定您可以适应您的需求

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

确保所有内容都在同一行上,该网站对其进行了格式设置,以便在||-不打断
CAD bloke

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)。

(您可以通过调用“ 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更新,有时可以更改安装目录)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.