2011-01-10 16 views
0

誰かが声明などがあれば、Windowsのバッチスクリプトでは、二重引用符を使用することを示唆しているようだ:ユーザーの二重引用符if文

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

しかし、私の場合、私は二重引用符を使用してスクリプトを引き起こすことを発見比較に失敗します。誰でもここで何が間違っているのを見ることができますか?

PS:私はSETLOCAL ENABLEDELAYEDEXPANSIONをスクリプトに入れました。

EDIT:ECHO%のフラグ%が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

関連する問題