Es scheint jemand doppelte Anführungszeichen zu verwenden, in Windows-Batch-Skript schlägt if-Anweisung wie:Benutzer doppelte Anführungszeichen in Batch-Skript if-Anweisung
IF "%FLAG%"=="1" (do something)
Allerdings habe ich in meinem Fall festgestellt, dass mit doppelten Anführungszeichen verwendet, kann das Skript verursachen scheitert beim Vergleich. Kann jemand sehen, was hier falsch sein könnte?
PS: Ich habe SETLOCAL ENABLEDELAYEDEXPANSION
im Skript.
EDIT: Diese Aussage sogar schlägt fehl, wenn ECHO% FLAG% ist 1.
EDIT2: Das ist mein Skript.
@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
Inwiefern scheitert es? Und welche Zeile (Sie verweisen generisch auf "% FLAG%' ", aber diese Variable erscheint nicht in Ihrem Skript). –
@Dennis:% isAll% == 1 funktioniert, während "% isAll%" == "1" nicht funktioniert. Entschuldigung für das verwirrende. – Stan
Inwiefern funktioniert es nicht (es funktioniert für mich)? –