Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

IF Bedingung - GOTO kann syntaktisch an dieser Stelle nicht verarbeitet werden

Frage Entwicklung Batch & Shell

Mitglied: Highend01

Highend01 (Level 1) - Jetzt verbinden

04.06.2009, aktualisiert 19:26 Uhr, 9561 Aufrufe, 7 Kommentare

Hi zusammen,

ich schwöre, vorgestern lief dieses Script noch ohne Fehlermeldung und jetzt steigt es mir bei einer IF Abfrage immer aus

01.
@ECHO off 
02.
REM ####################################################### 
03.
REM ### Declare Variables ################################# 
04.
REM ####################################################### 
05.
REM ### Store Directory Paths				### 
06.
SET WorkingDir=%~pd0 
07.
SET WorkingDir=%WorkingDir:~0,-1% 
08.
 
09.
REM ### Store Tool Paths	 			### 
10.
SET XQGetOSVer=%WorkingDir%\.Tools\xqgetosver.exe 
11.
SET ISAdmin=%WorkingDir%\.Tools\isadmin.exe 
12.
SET SetEnv=%WorkingDir%\.Tools\setenv.exe 
13.
SET CECHO=%WorkingDir%\.Tools\cECHO.exe 
14.
 
15.
REM ### Evaluate OS Version	 			### 
16.
"%XQGetOSVer%" /B /N 
17.
IF %ERRORLEVEL%==99 SET OSVer={0c}Unknown{07} 
18.
IF %ERRORLEVEL%==11 SET OSVer=Windows 7 
19.
IF %ERRORLEVEL%==10 SET OSVer=Windows 2008 Server 
20.
IF %ERRORLEVEL%==9 SET OSVer=Windows Vista 
21.
IF %ERRORLEVEL%==8 SET OSVer=Windows 2003 Server 
22.
IF %ERRORLEVEL%==7 SET OSVer=Windows XP 
23.
IF %ERRORLEVEL%==6 SET OSVer=Windows ME 
24.
IF %ERRORLEVEL%==5 SET OSVer=Windows 2000 
25.
IF %ERRORLEVEL%==4 SET OSVer=Windows 98 
26.
IF %ERRORLEVEL%==3 SET OSVer=Windows NT 
27.
IF %ERRORLEVEL%==2 SET OSVer=Windows 95 
28.
IF %ERRORLEVEL%==1 SET OSVer=Windows 3.1 
29.
 
30.
IF "%OSVer%"=="Windows 7" SET RegPath=Windows_7 
31.
IF "%OSVer%"=="Windows XP" SET RegPath=Windows_XP 
32.
IF "%OSVer%"=="Windows 2000" SET RegPath=Windows_2000 
33.
IF "%OSVer%"=="Windows Vista" SET RegPath=Windows_Vista 
34.
IF "%OSVer%"=="Windows 2003 Server" SET RegPath=Windows_2003 
35.
IF "%OSVer%"=="Windows 2008 Server" SET RegPath=Windows_2008 
36.
 
37.
REM ### Check for 32 or 64 Bit OS			### 
38.
IF EXIST %windir%\SysWoW64\NUL ( 
39.
SET RegAdd64=WOW6432node 
40.
) ELSE ( 
41.
SET RegAdd64= 
42.
43.
 
44.
REM ### Check for Admin Rights				### 
45.
"%ISAdmin%" -s 
46.
IF %ERRORLEVEL%==1 ( 
47.
SET AdminRights=False 
48.
) ELSE ( 
49.
SET AdminRights=True 
50.
51.
 
52.
SET ValidPath=HKCU 
53.
 
54.
REM ### End Variables ##################################### 
55.
 
56.
 
57.
 
58.
REM ###	Main Menu					### 
59.
 
60.
:MainMenu 
61.
 
62.
REM ###	Check for Environment Variables			### 
63.
SET RegEnvPath=HKLM\System\CurrentControlSet\Control\Session Manager\Environment 
64.
 
65.
REG QUERY "%RegEnvPath%" /v StorageDrive >NUL 2>NUL 
66.
IF %ERRORLEVEL%==0 ( 
67.
SET CheckEnvStatus={0b}[Done] 
68.
FOR /F "tokens=2*" %%A IN ('REG QUERY "%RegEnvPath%" /v StorageDrive') DO SET StorageDrive=%%B 
69.
SET StorageDriveExist= 
70.
) ELSE ( 
71.
SET CheckEnvStatus={0c}[Missing] 
72.
SET StorageDrive=D: 
73.
SET StorageDriveExist=[Attention: Default Setting!] 
74.
75.
REG QUERY "%RegEnvPath%" /v UserProfilePath >NUL 2>NUL 
76.
IF %ERRORLEVEL%==0 ( 
77.
FOR /F "tokens=2*" %%A IN ('REG QUERY "%RegEnvPath%" /v UserProfilePath') DO SET UserProfilePath=%%B 
78.
SET UserProfilePathExist= 
79.
) ELSE ( 
80.
SET UserProfilePath=Users 
81.
SET UserProfilePathExist=[Attention: Default Setting!] 
82.
83.
 
84.
REM Check for Directories 
85.
SET "CheckDir=%StorageDrive%\%UserProfilePath%" 
86.
IF EXIST %CheckDir%\NUL ( 
87.
SET CheckDirStatus={0b}[Done] 
88.
) ELSE ( 
89.
SET CheckDirStatus={0c}[Missing] 
90.
91.
 
92.
REM ###	Display Main Menu				### 
93.
CLS 
94.
ECHO. 
95.
ECHO [Main Menu] 
96.
ECHO. 
97.
 
98.
IF %AdminRights%==False ( 
99.
"%CECHO%" {07}OS: %OSVer%{07} 
100.
ECHO. 
101.
ECHO Registry Path: HKLM\Software\%RegAdd64% 
102.
"%CECHO%" {07}Reg Files: %WorkingDir%\%RegPath%{07} 
103.
ECHO. 
104.
ECHO. 
105.
"%CECHO%" {07}Current Username: %username% {0c}[YOU HAVE NO ADMIN RIGHTS]{07} 
106.
ECHO. 
107.
ECHO. 
108.
"%CECHO%" {07}1 - Create User Directories %CheckDirStatus%{07} 
109.
ECHO. 
110.
ECHO 2 - Create User Registry Entries 
111.
ECHO 3 - Additional Tasks 
112.
ECHO 4 - Exit 
113.
ECHO. 
114.
 
115.
SET /p "choice=Make your selection: " 
116.
 
117.
IF %choice% == 1 GOTO CreateDirectories 
118.
IF %choice% == 2 GOTO CreateRegistryEntries 
119.
IF %choice% == 3 GOTO AdditionalTasks 
120.
IF %choice% == 4 GOTO Exit 
121.
GOTO MainMenu 
122.
 
123.
) ELSE ( 
124.
 
125.
"%CECHO%" {07}OS: %OSVer%{07} 
126.
ECHO. 
127.
ECHO Registry Path: HKLM\Software\%RegAdd64% 
128.
"%CECHO%" {07}Reg Files: %WorkingDir%\%RegPath%{07} 
129.
ECHO. 
130.
ECHO. 
131.
"%CECHO%" {07}Current Username: %username% {0b}[ADMIN RIGHTS GRANTED]{07} 
132.
ECHO. 
133.
ECHO. 
134.
"%CECHO%" {07}1 - Set Environment Variables %CheckEnvStatus%{07} 
135.
ECHO. 
136.
"%CECHO%" {07}2 - Create Directories %CheckDirStatus%{07} 
137.
ECHO. 
138.
ECHO 3 - Create Registry Entries 
139.
ECHO 4 - Additional Tasks 
140.
ECHO 5 - Exit 
141.
ECHO. 
142.
 
143.
SET /p "choice=Make your selection: " 
144.
 
145.
IF %choice% == 1 GOTO SetEnvironmentVariables 
146.
IF %choice% == 2 GOTO CreateDirectories 
147.
IF %choice% == 3 GOTO CreateRegistryEntries 
148.
IF %choice% == 4 GOTO AdditionalTasks 
149.
IF %choice% == 5 GOTO Exit 
150.
GOTO MainMenu 
151.
152.
 
153.
:CreateDirectories 
154.
 
155.
:CreateRegistryEntries 
156.
 
157.
:AdditionalTasks 
158.
 
159.
:SetEnvironmentVariables 
160.
 
161.
:AdditionalTasks 
162.
 
163.
: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:

01.
[Main Menu] 
02.
 
03.
"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
Mitglied: LotPings
04.06.2009 um 19:34 Uhr
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
Bitte warten ..
Mitglied: Highend01
04.06.2009 um 20:08 Uhr
False bedeutet in diesem Zusammenhang, dass keine Adminrechte vorhanden sind.

Das Tool isadmin.exe liefert per "errorlevel" die Aussage darüber zurück, ob Adminrechte vorhanden sind (oder auch nicht).
errorlevel==1 -> keine Adminrechte, errorlevel!=1 -> Adminrechte.

Das werte ich aus und setze die Variable %AdminRights% entsprechend. Diese ist niemals leer, entweder erhält sie den
Werte False oder True.

Ich kann auch vor der Zeile IF %AdminRights%==False (
ein Echo Wert der Variable AdminRights: %AdminRights% einbauen, was im Output dann auch ein:
Wert der Variable AdminRights: False
...
liefert.

Die Bedingung sollte also zutreffen.

Gruß,
Highend
Bitte warten ..
Mitglied: 76109
04.06.2009 um 20:43 Uhr
Hallo Highend01!

Ich denke, LotPings will damit sagen, ob die Variablen True und False auch definiert sind?

Gruß Dieter
Bitte warten ..
Mitglied: Highend01
04.06.2009 um 20:54 Uhr
Hallo Dieter,

es sind doch nur Stringvergleiche, die ich da durchführe, True und False sind nicht als Variablen deklariert worden.
Ich kann auch "False" mit dem Namen "Schlecht" ersetzen (wenn es hier ein Problem mit irgendwelchen in der Scriptumgebung vordefinierten Variablen gehen könnte). Das ändert aber nichts daran, dass der Code nach der Bedingung irgendwie nicht korrekt ausgeführt wird. Scheint meiner Auffassung nach aber nicht am Vergleich %AdminRights%==False zu scheitern, da ich es gerade auch noch mal mit einem anderen Variablennamen probiert habe.

Gruß,
Highend
Bitte warten ..
Mitglied: 76109
04.06.2009 um 21:06 Uhr
Hallo Highend01!

Du hast natürlich Recht. Mein Fehler!

Gruß Dieter
Bitte warten ..
Mitglied: Ignitor
05.06.2009 um 10:09 Uhr
Also nur mal zwei prinzipielle Dinge, aber vielleicht hilft ja eins davon:

1. Stringvergleiche sollte man so durchführen:
01.
IF "%AdminRights%"=="False" ...
Denn wie LotPings schon gesagt hat:
Wenn die Variable %AdminRights% leer ist, ist es klar das ein Fehler kommt.
Sonst sieht das für den Interpreter nämlich so aus:
01.
IF ==False
Mit Anführungszeichen kommt aber ein korrekter Vergleich zustande:
01.
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:
01.
IF %choice%==1 GOTO CreateDirectories  
02.
IF %choice%==2 GOTO CreateRegistryEntries  
03.
IF %choice%==3 GOTO AdditionalTasks  
04.
IF %choice%==4 GOTO Exit 
#

Gruß, Jochen
Bitte warten ..
Mitglied: Highend01
05.06.2009 um 10:26 Uhr
Hallo Jochen,

Wie gesagt, %AdminRights% kann prinzipiell nicht leer sein, weil in
01.
REM ### Check for Admin Rights				### 
02.
"%ISAdmin%" -s 
03.
IF %ERRORLEVEL%==1 ( 
04.
SET AdminRights=False 
05.
) ELSE ( 
06.
SET AdminRights=True 
07.
)
ja in jedem Fall ein nichtleerer Ausdruck zugewiesen wird.

Ein zusätzlich eingebautes
01.
ECHO Wert der Variable AdminRights: %AdminRights%
direkt vor der IF Bedingung liefert im Output ja auch ein
01.
Wert der Variable AdminRights: False
zurück und der Vergleich
01.
IF False==False (
dürfte an sich nicht scheitern.

Grundsätzlich habt ihr natürlich recht, es ist ein Stringvergleich und sollte daher besser in Anführungsstrichen stehen.

Ich hab deine Vorschläge deshalb übernommen und

01.
IF "%AdminRights%"=="False" (
so wie

01.
IF %choice%==1 GOTO CreateDirectories   
02.
IF %choice%==2 GOTO CreateRegistryEntries   
03.
IF %choice%==3 GOTO AdditionalTasks   
04.
IF %choice%==4 GOTO Exit
entsprechend geändert.

Leider ändert es nichts an der eigentlichen Fehlermeldung, wenn das Script ausgeführt wird.

Ich bin irgendwie ziemlich ratlos mittlerweile...

Gruß,
Highend
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

JavaScript
gelöst Website nach Bedingung umleiten (6)

Frage von zeroblue2005 zum Thema JavaScript ...

Windows Server
ImageUnattend.xml kann nicht analysiert bzw verarbeitet werden (1)

Frage von frayk23 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...