2016-01-11 39 views
0

我想爲進程創建一個切換批處理腳本,以便如果它正在運行,它會被殺死,如果它不被啓動。這是我有:批處理 - 殺死程序如果運行,如果不是,則啓動它

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

@rojo,腳本中沒有其他行,就是這樣。但是你的建議奏效了!我修改了第二部分,所以它是'(開始「」application.exe)「,因爲我想讓控制檯關閉,但除此之外它完美地工作!如果你想添加一個答案,我很樂意接受它。 – Steve

+0

答案已添加。謝謝! – rojo

回答

3

效率更高的是使用conditional execution

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

我覺得你的腳本失敗的原因是因爲你已經在你的set procopen行了周圍的等號空間。你基本上設置一個變量名爲procopenspace = spacenumeral,變量名和值都包含空格。在set命令中,空格被視爲文字空格字符,而不是作爲令牌分隔符。現在,如果你完成了set /a,它可能會工作(因爲set /a更容忍間距)。或者如果你已經離開了這個空間,那麼這可能會起作用。下面是一個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

+0

謝謝!你的解決方案爲我解決了它 – Steve

相關問題