Двойная кавычка пользователя в пакетном скрипте if - PullRequest
0 голосов
/ 11 января 2011

Кажется, кто-то предлагает использовать двойные кавычки в пакетном скрипте Windows, если выражение выглядит так:

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

Однако в моем случае я обнаружил, что использование двойной кавычки может привести к сбою сценария при сравнении. Кто-нибудь может увидеть, что здесь может быть не так?

PS: у меня SETLOCAL ENABLEDELAYEDEXPANSION в сценарии.

EDIT: Этот оператор даже не выполняется, когда 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

1 Ответ

0 голосов
/ 11 января 2011

Отсроченное расширение не имеет к этому никакого отношения.

Какое значение %FLAG% в случае неудачного сравнения, т.е. что выводит ECHO %FLAG%?

...