Batch Wie kann ich in einer Batch mehrere befehle nach if ausführen

CED999

Lieutenant
Registriert
Juni 2011
Beiträge
963
Hallo allerseits,

in einer Batch habe ich stehen:
Code:
if %dow% EQU 5 goto macheVirenscan

wie müsste ich das nun schreiben, wenn ich mehrere Comands ausführen möchten wenn dow=5 ist.

Grüße!
 
if %dow% EQU 5 do (
befehl 1
befehl 2
befehl 3
... )

() um die befehle
 
Hallo.

Goto Befehle sind in einer Schleife nach meiner Erfahrung u.U. recht problematisch.

Den Goto-Befehl würde ich daher zuletzt schreiben.

Sprungmarken (wie das macheVirenscan) schreibe ich persönlich mit einem Doppelpunkt vorher, also goto :macheVirenscan

Die runden Klammern hat mein Vorposter schon genannt.

Falls alles nicht so richtig klappen will, aber erst dann, versuche mal das hier:
if %dow% EQU 5 Befehl1
if %dow% EQU 5 Befehl2
if %dow% EQU 5 Befehl3


Grüße
Becki

edit: den Befehl *do* habe ich entfernt aus den Zeilen, da habe ich mich geirrt, wie auch der Vorposter.
 
Zuletzt bearbeitet:
Für den do ( ) Befehl bekomme ich die Fehlermeldung Befehl nicht gefunden. Ich nutze Win7 64bit...

@Becki: das mit dem If klingt eigentlich verlocken, siehst du da Probleme? - sollte doch gehen oder?
 
Zuletzt bearbeitet: (Falscher Name)
Hallo

Probiere mal das hier ohne ein goto:



if %dow% EQU 5 (
echo test1
befehl1
echo test2
befehl2
echo test3
befehl3
pause
)


So solltest Du sehen können, wo das Problem liegt.
Du bekommst eine Ausgabe in die DOS-Box mit test1 usw.
Ich tippe auf einen Tippfehler bei einem Befehl, oder auf einen fehlenden Pfad.

Bei mir hier, ebenfalls 64 Bit win7 funktioniert diese Schleife, habe ich gerade eben nochmals genau getestet. Nutze ich selbst fast täglich bei meinen eigenen Batches.

Wenn Du mal den entsprechenden Abschnitt deiner Batch hier postest, kann vielleicht jemand den Fehler finden.

Gruß
Becki

edit: die einzelnen IF Zeilen sollten auch gehen.

edit2: das do muss weg bei der Schleife mit Klammern
 
Zuletzt bearbeitet:
Hi Becki,

Ich habe das jetzt mal ohne das do probiert und es funzt. Super danke Dir!

Das das mit dem Goto nicht opitmal ist habe ich auch schon gemerkt - wenn das zu oft eingesetzt wird brummt einem der Kopf um sich zu überlegen ob die Logik in jedem Fall noch stimmt... Aber das kann ich jetzt ja mit den mehreren Befehlen in der If Klammer umgehen..

Da du das ja schon länger benutzt: Sind da irgendwelche Probleme/Besonderheiten mit der Klammer zu erwarten?

Grüße an euch alle!
 
> Da du das ja schon länger benutzt: Sind da irgendwelche Probleme/Besonderheiten mit der Klammer zu erwarten?


Ja, in der Tat.
In Klammern kannst Du unerwartete Probleme mit Variabeln bekommen, da sie "normalerweise" innerhalb der Schleife manchmal nicht verändert/aktualisiert werden. Dieses Verhalten kann man jedoch steuern/aktivieren mit einem besonderen Befehl zu Beginn der Batch - oder umschiffen durch geschickte Programmierung. Der Vollständigkeit halber, der Befehl lautet:
SETLOCAL ENABLEDELAYEDEXPANSION

Dabei muss für den Namen der Variable dann nicht das Prozentzeichen gesetzt werden, sondern das Ausrufezeichen. Alles nicht so einfach für Anfänger.

Ferner könnten dir in Schleifen Probleme auftauchen mit Sonderzeichen. Auch dies ist relativ selten, aber könnte passieren.

Programmierung ist nicht einfach, zumindest nicht für mich, auch ich tappe oft in Fallen.

Gruß
Becki
 
In Klammern kannst Du unerwartete Probleme mit Variabeln bekommen, da sie "normalerweise" innerhalb der Schleife manchmal nicht verändert/aktualisiert werden. Dieses Verhalten kann man jedoch steuern/aktivieren mit einem

da ich in der Hilfe dazu nichts gefunden habe - du meinst damit, dass die Variable in einer Schleife normalerweise korrekt hochzählt, aber wenn ich es in die If-Anweisung in Klammer schreibe, dann könnte es Probleme geben. Richtig?
Ergänzung ()

@frogger9: ich kapiere die Hilfe dazu nicht. Ist irgendwie für einen newbie schwer zu verstehen. Wenn eine Prog z. B. 3 Errorlevel hat, wie würde das dann konkret aussehen auf die unterschiedlichen Werte unterschiedliche Aktionen zu setzen?

@All: Ich habe im Internet auch eine Methode gefunden, dass man mit & Befehle hinter einem If verknüpfen kann. Hat das schon jemand Erfahrungen damit gesamelt? Es funktioniert, aber welche Probleme sind da zu erwarten?

Greetz...
 
zu "&"-Befehl:
Funktioniert, habe es benutzt für z. B. eigene Befehle im Kontext-Menu (hier hat man nur eine Zeile zu Verfügung).
Direkte Probleme weiß ich keine, außer das es etwas unübersichtlich wird.

An dieser Stelle eines noch, was dir evtl. von nützen sein könnte.
Wenn du "&&" zum Verbinden von mehren Befehlen verwendest.
Wird der Befehl nur ausgeführt, wenn der erste erfolgreich.
Bei dem bisherigen Beispiel (mit der Klammer-Methode) werden alle Befehle nacheinander
abgearbeitet, auch wenn bei einem vorherigen Befehl Fehler auftauchen.

Primär würde ich aber die Klammer-Methode vorziehen, zumindest bei mehr als 2 Befehlen.

zu Variable:
Zur leichteren Verständnis, bzw. als Beispiel für die Variablen-Problematik
habe ich dir schnell mal was zusammen-geschrieben.

Code:
:START
CMD /C
ECHO OFF
SETLOCAL EnableDelayedExpansion
(
ECHO.Aktuelle Zeit:
ECHO.%Time%
ECHO.
PING /n 2 localhost /w 1000 >nul
ECHO.Zeit nach 1 Sekunde Pause ohne aktuallisierende Variable:
ECHO.%Time%
ECHO.
ECHO.Zeit nach 1 Sekunde Pause mit aktuallisierende Variable:
ECHO.!TIME!
)
PAUSE
 
Code:
Rem Beispiel
CHCP 1252

CHOICE /C CDH /M Wähle [C] für CD, [D] für DVD oder [H] für HDD
IF errorlevel 3 goto sub_hdd
IF errorlevel 2 goto sub_dvd
IF errorlevel 1 goto sub_cd
 
@Helibob & forgger9: Danke euch beiden für eure erklärungen.. Muss das bei Gelegenheit mal alles verarbeiten...
 
Zurück
Oben