2011-01-10 26 views
0

似乎有人建議使用雙引號在Windows批處理腳本if語句,如:用戶雙引號if語句

IF "%FLAG%"=="1" (do something) 

然而,在我的情況下,我發現,使用雙引號可能導致腳本比較失敗。任何人都可以看到這裏可能是錯的嗎?

PS:我在腳本中有SETLOCAL ENABLEDELAYEDEXPANSION

編輯: 當ECHO%FLAG%爲1

EDIT2這種說法甚至失敗: 這是我的腳本。

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 

set CFG=C:\config 
set LOBBYLIST=%CFG%\serverlist_lobby_server.txt 
set DBDAEMONLIST=%CFG%\serverlist_daemon_server.txt 
set LIST= 
set FOLDER= 

set /p OP= Delete 1.Lobby, 2.dbdaemon, All? (1,2,a) 

:BEGIN 
if %OP%==1 (GOTO DELETE_LOBBY_DUMP) 
if %OP%==2 (GOTO DELETE_DBDAEMON_DUMP) 
GOTO END 


:DELETE_LOBBY_DUMP 
set LIST=%LOBBYLIST% 
set FOLDER=LobbyServer 
GOTO START_DELETE 
:DELETE_DBDAEMON_DUMP 
set LIST=%DBDAEMONLIST% 
set FOLDER=DBDaemonServer\Lobby 
GOTO START_DELETE 
:DELETE_ALL 
set /a OP = OP + 1 
GOTO BEGIN 




:START_DELETE 
for %%b in (%LIST%) do ( 
    echo %%b 
    for /f %%a in (%%b) do ( 
     echo %%a 
     dir \\%%a\c$\Services\%FOLDER%\*.dmp | find "dmp" 
     dir \\%%a\c$\WINDOWS\PCHEALTH\ERRORREP\UserDumps\*.hdmp | find "hdmp" 
    )) 

echo. 
echo. 

if %isAll%==1 (set isContinue=y 
) ELSE (set /p isContinue= Continue? (y/n) 
) 

if %isContinue%==y (
    for %%b in (%LIST%) do ( 
     echo %%b 
     for /f %%a in (%%b) do ( 
      echo %%a 
      del \\%%a\c$\Services\%FOLDER%\*.dmp 
      del \\%%a\c$\WINDOWS\PCHEALTH\ERRORREP\UserDumps\*.hdmp 
     ) 
    ) 
) 

if %isAll%==1 (GOTO DELETE_ALL) 

GOTO END 
:END 

pause 
+0

它失敗的方式是什麼?哪一行(通常指「%FLAG%'」,但該變量沒有出現在腳本中)。 –

+0

@ Dennis:%isAll%== 1將起作用,而「%isAll%」==「1」不會。抱歉讓人困惑。 – Stan

+0

它不起作用(它適用於我)? –

回答

0

延遲擴展與它無關。

當比較失敗時%FLAG%的值是多少,即ECHO %FLAG%輸出的是多少?

+0

當ECHO%FLAG%爲1時,此聲明甚至失敗。 – Stan

+0

@Stan:那麼其他內容是錯誤的。發佈您的腳本(或相關代碼片段),因爲這應該始終有效。 – Jon

+0

更新了我的帖子。你可以看一下嗎? – Stan