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
GELÖST

If - If mit anschließendem goto funktioniert nicht

Frage Entwicklung Batch & Shell

Mitglied: Nagus

Nagus (Level 2) - Jetzt verbinden

07.01.2011 um 09:08 Uhr, 4189 Aufrufe, 7 Kommentare

Moin, ich bins schon wieder

Ich kämpfe mit einer doppelten IF abfrage und anschließendem GOTO.

stark abgespeckt sieht das Script so aus:

01.
rem @echo off 
02.
color 1F 
03.
 
04.
set manuell=no 
05.
if /I %manuell% EQU NO goto Var10 
06.
set/A Var10=0 
07.
set/A Var12=1 
08.
 
09.
:Var10 
10.
REM +++++++++++++++++++++++++++++++ Var 10 +++++++++++++++++++++++++++++++++++++++++ 
11.
if /I %manuell%==yes if %Haus10%==0 (goto Var12) 
12.
pause 
13.
goto ende 
14.
 
15.
:Var12 
16.
REM +++++++++++++++++++++++++++++++ Var 12 +++++++++++++++++++++++++++++++++++++++++ 
17.
echo Var12 
18.
pause 
19.
goto ende 
20.
 
21.
:ende
Wenn manuell auf YES gesetzt ist läuft das sauber durch. Sobald ich das jedoch auf NO setze bekomme ich die Fehlermeldung (goto wäre an dieser Stelle syntaktisch nicht verarbeitbar.
Irgendwie mache ich bei der Verschachtelung einen Fehler und ich bekomme den nicht in den Griff. Ich stehe auf den Schlauch. Wenn ich alles für NO optimiere läuft nacher bei YES nix mehr ...

Was ist mein Fehler?

Viele Grüße
Nagus
Mitglied: mathe172
07.01.2011 um 09:40 Uhr
Hallo Nagus!

So wie es ausschaut ist die Variable %Haus10% in Zeile 11 leer - Versuch mal die If-abfrage so zu machen:
01.
If /I "%manuell%"=="yes" if "%Haus10%"==0 (goto :Var12)
Die " bewirken, dass nie eine Seite des Vergleichs leer ist - dann spinnt nämlich das If

Mathe172
Bitte warten ..
Mitglied: pieh-ejdsch
07.01.2011 um 09:55 Uhr
moin Nagus,

...bekomme ich die Fehlermeldung (goto wäre an dieser Stelle syntaktisch nicht verarbeitbar...
da ist entweder die Variable %Haus10% oder %Manuell% nicht gesetzt ich tendiere auf %Haus10%
das mag ja zum Testen in der CMD-Line gehen und keinen syntatischen Fehler hervorrufen, aber in der CMD-Line werden nicht gesetzte Variablennamen mit Prozent drumrum dargestellt siehe Umgang mit Variablen
vom Batch-Parser wird ja erst die komplette Zeile eingelesen daher der Fehler

gestalte Deine Vergleiche mal so
01.
if /i "%manuell%" EQU "NO" goto :Var10 
02.
.... 
03.
if "%Haus10%"=="0" goto :Var12
eine Klammer brauchst Du nur wenn mehrere Anweisung als eine Zeile angesehen werden sollen oder vor der else Klausel

[edit] mathe war schneller ...[/edit]

Gruß Phil
Bitte warten ..
Mitglied: jeb-the-batcher
07.01.2011 um 10:50 Uhr
Moin,

oder mit Delayed Expansion arbeiten, dann klappt es auch ohne Anführungszeichen, egal was oder ob überhaupt was in der Variabel drin ist.
01.
if /i !manuell! EQU NO goto :Var10 
02.
if !Haus10!==0 goto :Var12
Gruß
jeb
Bitte warten ..
Mitglied: Nagus
07.01.2011 um 13:18 Uhr
Erstmal Danke für die Antworten!

Die Zeile
01.
If /I "%manuell%"=="yes" if "%Haus10%"==0 (goto :Var12)
war nicht ganz korrekt sondern richtig wäre gewesen - da habe ich gepennt ...
01.
If /I "%manuell%"=="yes" if "%Var10%"==0 (goto :Var12)
Hat aber kein Ergebnis auf das Script gehabt der Fehler kam noch immer ...

Tatsächlich hat jebs Lösung gezogen
01.
if /I !manuell!==yes if !Haus10!==0 goto Var12
Verstehen tue ich es aber nicht!
Ich habe alle Variablen beim Start mit Werten versehen!

01.
set manuell=no 
02.
... 
03.
REM +++++++++++ eine Einrichtung wird mit 1 aktiviert bsp.: set/a var10=1 +++++++++++ 
04.
set/A var10=0 
05.
set/A var12=0 
06.
set/A var14=0 
07.
... 
08.
:var10 
09.
If /I "%manuell%"=="yes" if "%Var10%"==0 goto :Var12 
10.
 
11.
... 
12.
:var12 
13.
...
was ist daran falsch? Wieso mault er immer goto wäre an dieser Stelle syntaktisch falsch?
grummel

Aber jetzt läuft es - und ich habe noch ein paar andere Fehler gefunden -.-

Deswegen nochmal Danke für Eure Hilfe!

Nagus
Bitte warten ..
Mitglied: miniversum
07.01.2011 um 14:19 Uhr
Du solltest beim zuweisen von Werten darauf achten das diese keine Leerzeichen danach enthalten, sonst gibts Probleme.
set manuell=no -> set "manuell=no"
set/A var10=0 -> set /A "var10=0"

Vergleiche funktionieren "besser" wenn beide Seiten in Anführungszeichen sind:
if "%Var10%"==0 -> if "%Var10%"=="0"
Es können beim == Probleme entstehen wenn Leerzeichen am Anfang oder am Ende enthalten sind. Daher nehme ich für vergleiche immer equ:
If /I "%manuell%"=="yes" -> If /I "%manuell%" equ "yes"

Allgemein:
Ich finde es etwas "schwierig" Variablen und Sprungmarken die gleichen Namen zu geben.

Für die Fehlersuche kannst du ja die Zeile:
If /I "%manuell%"=="yes" if "%Var10%"==0 (goto :Var12)
aufteilen in:
If /I "%manuell%"=="yes" (
if "%Var10%"==0 (
goto :Var12
)
)
Bitte warten ..
Mitglied: Nagus
07.01.2011 um 14:33 Uhr
Hi miniversum,

Danke für die Tipps!

Das die Sprungmarken und Variablen gleich sind ist aus einem Denkfehler heraus entstanden. Dass muss ich irgendwann mal korrigieren - wenn das Script sauber läuft
Viele Grüße
Nagus
Bitte warten ..
Mitglied: jeb-the-batcher
07.01.2011 um 14:39 Uhr
Hallo Nagus,

wie miniversum schon geschrieben hat, sollte man beide Seiten eines Vergleich "gleich" halten.

In deinem Beispiel also if "%Var10%"=="0" (goto :Var12)
weil Zeichenweise verglichen wird. Also hinteher "0" mit "0".
Bei deinem Code wurde aber "0" mit 0 verglichen, was niemals gleich sein kann.

Gruß
jeb
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Linux
LTSP: PXE Boot funktioniert nicht (16)

Frage von Fenris14 zum Thema Linux ...

Virtualisierung
Drucker aus einer VM heraus funktioniert nicht (5)

Frage von NCCTech zum Thema Virtualisierung ...

LAN, WAN, Wireless
gelöst Netzwerk funktioniert nur in eine Richtung mit Gigabit (28)

Frage von DrChiwago zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...