2011-01-10 28 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