2016-03-31 79 views
1

當我運行下面的代碼時,我得到「taskkill不是預期的」。程序在我可以設置%stop%的值之前關閉。我該如何解決這個錯誤?批處理 - 命令不是預期的

@echo off 
set ucs=ucs.exe 
cls 
echo. 
echo Check %ucs%... 
tasklist /FI "IMAGENAME eq %ucs%" 2>NUL | find /I /N "%ucs%">NUL 
if %errorlevel%==0 (
echo %ucs% is running! 
echo You need to stop it before editing ucsdb 
echo 1 - Stop 
echo 0 - Menu 
set /p "stop=Stop %ucs%?" 
if %stop%==1 taskkill /im %ucs% /t && goto sqlitebrowser 
if %stop%==0 goto sqlitemenu 
if not %stop%==1 if not %stop%==2 echo Option "%stop%" not exist! && timeout /t 2 /nobreak >NUL && goto sqlitemenu 
) ELSE (
echo %ucs% is not running 
echo Loading SqliteBrowser... 
timeout /t 2 /nobreak >nul 
goto sqlitebrowser) 

代碼編輯:!!!!

setlocal EnableDelayedExpansion 
cls 
echo. 
echo Check %ucs%... 
pause 
tasklist /FI "IMAGENAME eq %ucs%" 2>NUL | find /I /N "%ucs%">NUL 
if %errorlevel%==0 (
echo %ucs% is running! 
echo You need to stop it before editing ucsdb 
echo 1 - Stop 
echo 0 - Menu 
set /p "stop=Stop %ucs%?" 
if !stop!==1 taskkill /im %ucs% /t && goto sqlitebrowser 
if !stop!==0 goto sqlitemenu 
if not !stop!==1 if not !stop!==0 echo Options "!stop!" not exist! && timeout /t 2 /nobreak >nul && goto sqlitemenu 
... 

如果不停止== 1,如果不停止== 0回聲選項 「停!」不存在!無法正常工作

+1

我非常確定變量'%stop%'沒有被定義... – aschipfl

+2

[批處理文件延遲擴展示例]的可能重複(http://stackoverflow.com/questions/10558316/example-of-批量延時擴展文件) –

+0

在設置%stop%的值之前,程序關閉。 – Blank517

回答

0

的問題是,你有一個左括號在這裏:

if %errorlevel%==0 (

這意味着,所有的命令到右括號,就好像裏面全都在一行進行處理。環境變量會立即展開。特別是,它試圖擴大%stop%。但是,你有沒有定義它,所以它擴展成空字符串,你if聲明是這樣的:

if ==1 taskkill [etc...] 

你需要做的是利用延遲擴展。從Dennis van Gils' comment閱讀the link

+1

鏈接我總是重定向人:[ss64](http://ss64.com/nt/delayedexpansion.html) –

+0

現在感謝它的工作!但'if if not!stop!== 1 if if!stop!== 2 echo option「!stop!」不存在! '總是使用此輸出執行:選項「!stop!」不存在! – Blank517

+0

@ Blank517是否在腳本的開頭添加了'setlocal EnableDelayedExpansion'? –