Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

If - If mit anschließendem goto funktioniert nicht

Mitglied: Nagus

Nagus (Level 2) - Jetzt verbinden

07.01.2011 um 09:08 Uhr, 4287 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 ..
Ähnliche Inhalte
Batch & Shell
"goto" kann syntaktisch an dieser Stelle nicht verarbeitet werden
gelöst Frage von Y4nn1ckBatch & Shell14 Kommentare

Morgen, ich schreibe gerade an einem Zufallsgenerator für die Klasse, also an einem, der auswählt, wer dran kommt. Ich ...

Batch & Shell
Batch Dateiabfrage. Wenn älter als dann goto
gelöst Frage von ZunarasBatch & Shell2 Kommentare

Hallo, ich bin am basteln und möchte in meiner Batch eine Abfrage einbauen. Hier das komplette Skript: Ich möchte ...

Batch & Shell
Wenn XX freier speicher dann goto
gelöst Frage von functionstrutBatch & Shell4 Kommentare

Hallo :-) ich hänge hier irgendwie an einer kleinigkeit und bekomme es nicht hin. ich möchte das wenn 10GB ...

Batch & Shell
If und GOTO in Batch
gelöst Frage von BoogiemanBatch & Shell7 Kommentare

Hallo :) Ich bringe mir zurzeit das Programmieren per JAVA und Batch bei bin nur bei manchem noch nicht ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 14 StundenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit25 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...