我试图为流程制作一个切换批处理脚本,这样如果它正在运行,它就会被杀死,如果不是,它就会被启动。这就是我所拥有的:
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.
我也觉得这是一种更有效的方式来写这个,但我不确定如何。任何帮助表示赞赏!
答案 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