IF Bedingung - GOTO kann syntaktisch an dieser Stelle nicht verarbeitet werden
Hi zusammen,
ich schwöre, vorgestern lief dieses Script noch ohne Fehlermeldung und jetzt steigt es mir bei einer IF Abfrage immer aus
Ich hab mal alles "überflüssige" an Code rausgeworfen (was in den verschiedenen anderen Menüs gemacht wird, z.B.) um das Posting im Rahmen zu halten.
Wenn ich das Script starte, erhalte ich (nur noch) diesen Output:
Der Fehler muss irgendwo in der IF %AdminRights%==False (
Bedingung (und deren nachfolgendem Code) stecken, aber ich seh ihn partout nicht. Anmerkung: Das script wird aus einer cmd, die nicht mit Adminrechten
gestartet wurde, aufgerufen. D.h. Die Variable %AdminRights% ist auch wirklich False.
Kommentiere ich die "IF %AdminRights%==False (" Anweisung (+") ELSE (") + der schließenden Runden Klammer aus, bekomme ich die Fehlermeldung nicht mehr.
Im Code sind das die Zeilen 98, 123 und 151.
Sieht jemand etwas offensichtliches, was ich aber nicht sehe?
Wenn mehr Infos oder Erläuterungen benötigt werden, einfach nachfragen, ich liefere dann alles notwendige nach.
Danke und Gruß,
Highend
ich schwöre, vorgestern lief dieses Script noch ohne Fehlermeldung und jetzt steigt es mir bei einer IF Abfrage immer aus
@ECHO off
REM #######################################################
REM ### Declare Variables #################################
REM #######################################################
REM ### Store Directory Paths ###
SET WorkingDir=%~pd0
SET WorkingDir=%WorkingDir:~0,-1%
REM ### Store Tool Paths ###
SET XQGetOSVer=%WorkingDir%\.Tools\xqgetosver.exe
SET ISAdmin=%WorkingDir%\.Tools\isadmin.exe
SET SetEnv=%WorkingDir%\.Tools\setenv.exe
SET CECHO=%WorkingDir%\.Tools\cECHO.exe
REM ### Evaluate OS Version ###
"%XQGetOSVer%" /B /N
IF %ERRORLEVEL%==99 SET OSVer={0c}Unknown{07}
IF %ERRORLEVEL%==11 SET OSVer=Windows 7
IF %ERRORLEVEL%==10 SET OSVer=Windows 2008 Server
IF %ERRORLEVEL%==9 SET OSVer=Windows Vista
IF %ERRORLEVEL%==8 SET OSVer=Windows 2003 Server
IF %ERRORLEVEL%==7 SET OSVer=Windows XP
IF %ERRORLEVEL%==6 SET OSVer=Windows ME
IF %ERRORLEVEL%==5 SET OSVer=Windows 2000
IF %ERRORLEVEL%==4 SET OSVer=Windows 98
IF %ERRORLEVEL%==3 SET OSVer=Windows NT
IF %ERRORLEVEL%==2 SET OSVer=Windows 95
IF %ERRORLEVEL%==1 SET OSVer=Windows 3.1
IF "%OSVer%"=="Windows 7" SET RegPath=Windows_7
IF "%OSVer%"=="Windows XP" SET RegPath=Windows_XP
IF "%OSVer%"=="Windows 2000" SET RegPath=Windows_2000
IF "%OSVer%"=="Windows Vista" SET RegPath=Windows_Vista
IF "%OSVer%"=="Windows 2003 Server" SET RegPath=Windows_2003
IF "%OSVer%"=="Windows 2008 Server" SET RegPath=Windows_2008
REM ### Check for 32 or 64 Bit OS ###
IF EXIST %windir%\SysWoW64\NUL (
SET RegAdd64=WOW6432node
) ELSE (
SET RegAdd64=
)
REM ### Check for Admin Rights ###
"%ISAdmin%" -s
IF %ERRORLEVEL%==1 (
SET AdminRights=False
) ELSE (
SET AdminRights=True
)
SET ValidPath=HKCU
REM ### End Variables #####################################
REM ### Main Menu ###
:MainMenu
REM ### Check for Environment Variables ###
SET RegEnvPath=HKLM\System\CurrentControlSet\Control\Session Manager\Environment
REG QUERY "%RegEnvPath%" /v StorageDrive >NUL 2>NUL
IF %ERRORLEVEL%==0 (
SET CheckEnvStatus={0b}[Done]
FOR /F "tokens=2*" %%A IN ('REG QUERY "%RegEnvPath%" /v StorageDrive') DO SET StorageDrive=%%B
SET StorageDriveExist=
) ELSE (
SET CheckEnvStatus={0c}[Missing]
SET StorageDrive=D:
SET StorageDriveExist=[Attention: Default Setting!]
)
REG QUERY "%RegEnvPath%" /v UserProfilePath >NUL 2>NUL
IF %ERRORLEVEL%==0 (
FOR /F "tokens=2*" %%A IN ('REG QUERY "%RegEnvPath%" /v UserProfilePath') DO SET UserProfilePath=%%B
SET UserProfilePathExist=
) ELSE (
SET UserProfilePath=Users
SET UserProfilePathExist=[Attention: Default Setting!]
)
REM Check for Directories
SET "CheckDir=%StorageDrive%\%UserProfilePath%"
IF EXIST %CheckDir%\NUL (
SET CheckDirStatus={0b}[Done]
) ELSE (
SET CheckDirStatus={0c}[Missing]
)
REM ### Display Main Menu ###
CLS
ECHO.
ECHO [Main Menu]
ECHO.
IF %AdminRights%==False (
"%CECHO%" {07}OS: %OSVer%{07}
ECHO.
ECHO Registry Path: HKLM\Software\%RegAdd64%
"%CECHO%" {07}Reg Files: %WorkingDir%\%RegPath%{07}
ECHO.
ECHO.
"%CECHO%" {07}Current Username: %username% {0c}[YOU HAVE NO ADMIN RIGHTS]{07}
ECHO.
ECHO.
"%CECHO%" {07}1 - Create User Directories %CheckDirStatus%{07}
ECHO.
ECHO 2 - Create User Registry Entries
ECHO 3 - Additional Tasks
ECHO 4 - Exit
ECHO.
SET /p "choice=Make your selection: "
IF %choice% == 1 GOTO CreateDirectories
IF %choice% == 2 GOTO CreateRegistryEntries
IF %choice% == 3 GOTO AdditionalTasks
IF %choice% == 4 GOTO Exit
GOTO MainMenu
) ELSE (
"%CECHO%" {07}OS: %OSVer%{07}
ECHO.
ECHO Registry Path: HKLM\Software\%RegAdd64%
"%CECHO%" {07}Reg Files: %WorkingDir%\%RegPath%{07}
ECHO.
ECHO.
"%CECHO%" {07}Current Username: %username% {0b}[ADMIN RIGHTS GRANTED]{07}
ECHO.
ECHO.
"%CECHO%" {07}1 - Set Environment Variables %CheckEnvStatus%{07}
ECHO.
"%CECHO%" {07}2 - Create Directories %CheckDirStatus%{07}
ECHO.
ECHO 3 - Create Registry Entries
ECHO 4 - Additional Tasks
ECHO 5 - Exit
ECHO.
SET /p "choice=Make your selection: "
IF %choice% == 1 GOTO SetEnvironmentVariables
IF %choice% == 2 GOTO CreateDirectories
IF %choice% == 3 GOTO CreateRegistryEntries
IF %choice% == 4 GOTO AdditionalTasks
IF %choice% == 5 GOTO Exit
GOTO MainMenu
)
:CreateDirectories
:CreateRegistryEntries
:AdditionalTasks
:SetEnvironmentVariables
:AdditionalTasks
:Exit
Ich hab mal alles "überflüssige" an Code rausgeworfen (was in den verschiedenen anderen Menüs gemacht wird, z.B.) um das Posting im Rahmen zu halten.
Wenn ich das Script starte, erhalte ich (nur noch) diesen Output:
[Main Menu]
"GOTO" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Der Fehler muss irgendwo in der IF %AdminRights%==False (
Bedingung (und deren nachfolgendem Code) stecken, aber ich seh ihn partout nicht. Anmerkung: Das script wird aus einer cmd, die nicht mit Adminrechten
gestartet wurde, aufgerufen. D.h. Die Variable %AdminRights% ist auch wirklich False.
Kommentiere ich die "IF %AdminRights%==False (" Anweisung (+") ELSE (") + der schließenden Runden Klammer aus, bekomme ich die Fehlermeldung nicht mehr.
Im Code sind das die Zeilen 98, 123 und 151.
Sieht jemand etwas offensichtliches, was ich aber nicht sehe?
Wenn mehr Infos oder Erläuterungen benötigt werden, einfach nachfragen, ich liefere dann alles notwendige nach.
Danke und Gruß,
Highend
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117513
Url: https://administrator.de/contentid/117513
Ausgedruckt am: 16.11.2024 um 01:11 Uhr
7 Kommentare
Neuester Kommentar
Was verstehst du unter False ?
Wenn die Variable %AdminRights% leer ist, ist es klar das ein Fehler kommt.
Füge auf beiden Seiten der Abfrage etwas hinzu, so dass sie niemals leer ist.
Gruß
LotPings
Wenn die Variable %AdminRights% leer ist, ist es klar das ein Fehler kommt.
Füge auf beiden Seiten der Abfrage etwas hinzu, so dass sie niemals leer ist.
Gruß
LotPings
Hallo Highend01!
Ich denke, LotPings will damit sagen, ob die Variablen True und False auch definiert sind?
Gruß Dieter
Ich denke, LotPings will damit sagen, ob die Variablen True und False auch definiert sind?
Gruß Dieter
Hallo Highend01!
Du hast natürlich Recht. Mein Fehler!
Gruß Dieter
Du hast natürlich Recht. Mein Fehler!
Gruß Dieter
Also nur mal zwei prinzipielle Dinge, aber vielleicht hilft ja eins davon:
1. Stringvergleiche sollte man so durchführen:
Denn wie LotPings schon gesagt hat:
Mit Anführungszeichen kommt aber ein korrekter Vergleich zustande:
2. Bin mir nicht sicher ob das was ausmacht, aber sollten die Leerzeichen in den Vergleichen von Zeile 117-120 etc. nicht weg?
Also so:
#
Gruß, Jochen
1. Stringvergleiche sollte man so durchführen:
IF "%AdminRights%"=="False" ...
Wenn die Variable %AdminRights% leer ist, ist es klar das ein Fehler kommt.
Sonst sieht das für den Interpreter nämlich so aus:IF ==False
IF ""=="False"
2. Bin mir nicht sicher ob das was ausmacht, aber sollten die Leerzeichen in den Vergleichen von Zeile 117-120 etc. nicht weg?
Also so:
IF %choice%==1 GOTO CreateDirectories
IF %choice%==2 GOTO CreateRegistryEntries
IF %choice%==3 GOTO AdditionalTasks
IF %choice%==4 GOTO Exit
Gruß, Jochen