批量 - 如果正在运行则杀死程序,如果不运行则启动它

时间:2016-01-11 15:04:13

标签: windows batch-file process

我试图为流程制作一个切换批处理脚本,这样如果它正在运行,它就会被杀死,如果不是,它就会被启动。这就是我所拥有的:

tasklist /FI "IMAGENAME eq ProcessName.exe" 2>NUL | find /I /N "ProcessName.exe">NUL
set procopen = %ERRORLEVEL%
if "%procopen%"=="0" taskkill /im ProcessName.exe 
if NOT "%procopen%"=="0" start "" ProcessName.exe

但每次我运行它,在第一个if语句之后我收到错误:

"1"=="0") was unexpected at this time.

我也觉得这是一种更有效的方式来写这个,但我不确定如何。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

更高效的方法是使用conditional execution

tasklist | find /i "application.exe" >NUL && (
    taskkill /im "application.exe" /f
) || (
    start "" application.exe
)

我认为您的脚本失败的原因是因为您的set procopen行中有等号的空格。你基本上设置了一个名为procopen space = space numeral的变量,变量名和值都包含空格。在set命令中,空格被视为文字空格字符,而不是标记分隔符。现在,如果你已经完成了set /a,它可能会起作用(因为set /a更能容忍间距)。或者,如果你把空格留出来set "procopen=%ERRORLEVEL%",那可能也会起作用。这是一个示例cmd控制台会话,用于演示:

  

C:\Users\me>set procopen = 0

     

C:\Users\me>set "res=%procopen%"

     

C:\Users\me>set res
  res=%procopen%

     

C:\Users\me>set "res=%procopen %"

     

C:\Users\me>set res
  res= 0