Discussion:
Verzweigung in Batch-Datei?
(zu alt für eine Antwort)
Albrecht Mehl
2005-10-12 08:53:05 UTC
Permalink
Gibt es die Möglichkeit, in einer Batch-Datei nach einer
Entscheidungsabfrage zu verzweigen, so in dem Sinne:

if %var1% > %var2% then ja-Zweig else nein-Zweig

?
Falls es diese Möglichkeit überhaupt gibt, ist die genaue
Befehlssyntax sicher anders. Daher ist auch dazu Information willkommen.

A. Mehl
--
Albrecht Mehl |Absendekonto wird nicht gelesen; eBriefe an:
Schorlemmerstr. 33 |mehl bei hrz1PunkthrzPunkttu-darmstadtPunktde
D-64291 Darmstadt, Germany|sehenswert - Relativist. Effekte
Tel. (+49 06151) 37 39 92 |http://www.tempolimit-lichtgeschwindigkeit.de
Helmut Schneider
2005-10-12 09:46:44 UTC
Permalink
Post by Albrecht Mehl
Gibt es die Möglichkeit, in einer Batch-Datei nach einer
if %var1% > %var2% then ja-Zweig else nein-Zweig
?
Falls es diese Möglichkeit überhaupt gibt, ist die genaue
Befehlssyntax sicher anders. Daher ist auch dazu Information willkommen.
Wie wäre es mit "if /?"? Oder wenigstens die OS Version?

Gruß, Helmut
--
Please do not feed my mailbox, Swen still does his job well
Bodo Wolff
2005-10-12 10:01:54 UTC
Permalink
Post by Albrecht Mehl
Gibt es die Möglichkeit, in einer Batch-Datei nach einer
if %var1% > %var2% then ja-Zweig else nein-Zweig
Hallo,

die Syntax für IF-Anweisungen in DOS-Batch Dateien:

if %3/==/ goto (hier Einsprunpunkt angeben) z. B: if %3/==/ goto
weiter
Einsprungpunkt vorne immer ein Doppelpunkt also

if %3/==/ goto start
:start
Bedingungen
goto Ende
:Ende

Bodo Wolff
--
Über 6000 MB Freeware für Windows zum Download http://www.bodo-wolff.de
Albrecht Mehl
2005-10-12 11:12:29 UTC
Permalink
Lieber Herr Wolff,

vielen Dank für die Antwort. Nur noch eine Nachfrage zur Klärung.
Post by Bodo Wolff
Post by Albrecht Mehl
Gibt es die Möglichkeit, in einer Batch-Datei nach einer
if %var1% > %var2% then ja-Zweig else nein-Zweig
Hallo,
if %3/==/ goto (hier Einsprunpunkt angeben) z. B: if %3/==/ goto
weiter
Einsprungpunkt vorne immer ein Doppelpunkt also
if %3/==/ goto start
:start
Bedingungen
goto Ende
:Ende
- Heißt das, daß die eigentliche Bedingung _nicht_ hinter dem
if, sondern in dem bedingten Zweig steht? Dort also

%var1% > %var2%

während die if-Formel die _feste_ Form

if %3/==/ goto <Sprungziel>

hat?

- Bedeutet dies ferner, daß nur einseitige, keine
zweiseitigen Sprünge erlaubt sind?

Dankbar

A. Mehl
--
Albrecht Mehl |Absendekonto wird nicht gelesen; eBriefe an:
Schorlemmerstr. 33 |mehl bei hrz1PunkthrzPunkttu-darmstadtPunktde
D-64291 Darmstadt, Germany|sehenswert - Relativist. Effekte
Tel. (+49 06151) 37 39 92 |http://www.tempolimit-lichtgeschwindigkeit.de
Bodo Wolff
2005-10-12 12:38:30 UTC
Permalink
Post by Albrecht Mehl
Lieber Herr Wolff,
- Heißt das, daß die eigentliche Bedingung _nicht_ hinter dem
if, sondern in dem bedingten Zweig steht? Dort also
%var1% > %var2%
während die if-Formel die _feste_ Form
if %3/==/ goto <Sprungziel>
hat?
- Bedeutet dies ferner, daß nur einseitige, keine
zweiseitigen Sprünge erlaubt sind?
nochmal deutlich: if %var/==/ Wert von %var einsetzen dann goto

Wie das mit if %3 > %var2% ist, weiß ich leider auch nicht genau.
Probier doch einfach mal aus.
if %var1/>/%var1 goto zeige

:echo blabla
goto Ende

:Ende

Bodo Wolff
--
Über 6000 MB Freeware für Windows zum Download http://www.bodo-wolff.de
Helmut Schneider
2005-10-12 12:51:17 UTC
Permalink
Post by Bodo Wolff
Post by Albrecht Mehl
Lieber Herr Wolff,
- Heißt das, daß die eigentliche Bedingung _nicht_ hinter dem
if, sondern in dem bedingten Zweig steht? Dort also
%var1% > %var2%
während die if-Formel die _feste_ Form
if %3/==/ goto <Sprungziel>
hat?
- Bedeutet dies ferner, daß nur einseitige, keine
zweiseitigen Sprünge erlaubt sind?
nochmal deutlich: if %var/==/ Wert von %var einsetzen dann goto
Wie das mit if %3 > %var2% ist, weiß ich leider auch nicht genau.
IF /? ist Euch beiden zu fad, richtig?!

Wenn die Befehlserweiterungen aktiviert sind, wird der IF-Befehl
folgendermaßen
verändert:

IF [/I] Zeichenfolge1 Vergleichsoperator Zeichenfolge2 Befehl
IF CMDEXTVERSION Zahl Befehl
IF DEFINED Variable Befehl

Dabei kann der Vergleichsoperator einer der folgenden sein:

EQU - gleich
NEQ - nicht gleich
LSS - kleiner als
LEQ - kleiner als oder gleich
GTR - größer als
GEQ - größer als oder gleich
--
Please do not feed my mailbox, Swen still does his job well
Thorsten Albrecht
2005-10-12 16:06:04 UTC
Permalink
Post by Helmut Schneider
IF /? ist Euch beiden zu fad, richtig?!
Offensichtlich.

BTW Schöner formatiert und oftmals aktueller als die Hilfe direkt in
der Kommandozeile bietet sich die Windowshilfe (F1) an. Dort erfährt
man jede Menge über jeden Dos-Befehl.

Hier moch ein Link auf "BATCH-Kurs für Einsteiger":
http://home.mnet-online.de/horst.muc/ger/batkurs.zip

(http://home.mnet-online.de/horst.muc/batkurs.htm)


BTW#2: Was ist eigentlich eine empfehlenswerte Alternative zur
"Skriptsprache" Dos? WSH, KiXtart, cygwin-Shell (oder doch nur 4nt),
...? Aus Gewohnheit nehme ich oft Dos-Batches, aber regelmäßig
streuben sich mir bei manchen Konstrukten die Haare (z.B. bei
For-Schleifen die manchmal notwendigen !%var%!-Konstrukte). In der c't
wurde oft wsh empfohlen; habe mich in dieses Objektmodell bisher aber
nicht einarbeiten können. Lohnt es sich?

Thorsten
Richard W. Könning
2005-10-13 02:20:07 UTC
Permalink
Post by Thorsten Albrecht
BTW#2: Was ist eigentlich eine empfehlenswerte Alternative zur
"Skriptsprache" Dos? WSH, KiXtart, cygwin-Shell (oder doch nur 4nt),
...?
Ich steh' auf Perl, da es unter vielen OS verwendbar ist.
Ciao,
Richard
--
Dr. Richard Könning Heßstraße 63
Tel.: 089/5232488 80798 München
Helmut Schneider
2005-10-13 07:48:22 UTC
Permalink
Post by Thorsten Albrecht
BTW#2: Was ist eigentlich eine empfehlenswerte Alternative zur
"Skriptsprache" Dos? WSH, KiXtart, cygwin-Shell (oder doch nur 4nt),
...? Aus Gewohnheit nehme ich oft Dos-Batches, aber regelmäßig
streuben sich mir bei manchen Konstrukten die Haare (z.B. bei
For-Schleifen die manchmal notwendigen !%var%!-Konstrukte). In der c't
wurde oft wsh empfohlen; habe mich in dieses Objektmodell bisher aber
nicht einarbeiten können. Lohnt es sich?
Ich erschlage unter Windows ziemlich alles ausserhalb von Logonscripts mit
vbs und WSH. Anfangen kann man z.B. hier
http://people.freenet.de/gborn/WSHBazaar/WSHBazaar.htm und natürlich hier
news:microsoft.public.de.german.scripting.wsh.
--
Please do not feed my mailbox, Swen still does his job well
Norbert Hahn
2005-10-12 14:15:31 UTC
Permalink
Post by Albrecht Mehl
Post by Bodo Wolff
if %3/==/ goto start
:start
Bedingungen
goto Ende
:Ende
- Heißt das, daß die eigentliche Bedingung _nicht_ hinter dem
if, sondern in dem bedingten Zweig steht? Dort also
%var1% > %var2%
Nein, das Beispiel verwendet eine unglückliche Wortwahl. Statt
Bedingungen müsste es Anweisungen heißen.
Post by Albrecht Mehl
während die if-Formel die _feste_ Form
if %3/==/ goto <Sprungziel>
hat?
Nein, es gibt viele Formen von IF. Und ELSE gibt es auch.
Wie schon geschrieben, mit if /? bekommt man eine ausführliche
Beschreibung samt Beispielen; leider auch Beispiele, wie man
es nicht machen kann.
Post by Albrecht Mehl
- Bedeutet dies ferner, daß nur einseitige, keine
zweiseitigen Sprünge erlaubt sind?
ELSE existiert.

Norbert
Holger Linge
2005-10-12 13:23:42 UTC
Permalink
Hallo

Mit der Befehlserweiterung geht sowohl IF .. ELSE als auch
verschachtelte IF

Beispiel:

@ECHO OFF
SET A=1
SET B=2
SET C=3

IF %A%==1 (
ECHO A=1
IF %B%==2 (
ECHO B=2
IF %C%==3 (
ECHO C=3
) ELSE (
ECHO C != 3
)
) ELSE (
ECHO B != 2
IF %C%==3 (
ECHO C=3
) ELSE (
ECHO C != 3
)
)
) ELSE (
ECHO A != 1
IF %B%==2 (
ECHO B=2
IF %C%==3 (
ECHO C=3
) ELSE (
ECHO C != 3
)
) ELSE (
ECHO B != 2
IF %C%==3 (
ECHO C=3
) ELSE (
ECHO C != 3
)
)
)

PAUSE
Albrecht Mehl
2005-10-13 08:30:29 UTC
Permalink
Hallo,
Hallo
Mit der Befehlserweiterung geht .....
Wie aktiviert man, bitte, die Befehlserweiterung?

A. Mehl
--
Albrecht Mehl |Absendekonto wird nicht gelesen; eBriefe an:
Schorlemmerstr. 33 |mehl bei hrz1PunkthrzPunkttu-darmstadtPunktde
D-64291 Darmstadt, Germany|sehenswert - Relativist. Effekte
Tel. (+49 06151) 37 39 92 |http://www.tempolimit-lichtgeschwindigkeit.de
Holger Linge
2005-10-13 11:10:23 UTC
Permalink
Zitat der Ausgabe von "cmd /?":

Befehlserweiterungen sind standardmäßig aktiviert. Erweiterungen
können unter Verwendung der Option "/E:OFF" für einen bestimmten
Aufruf des Befehlsprozessors deaktiviert werden. Erweiterungen können
auch für alle Aufrufe des Befehlsprozessors deaktivieren werden, indem
einer oder beide der folgenden Werte in der Registrierung auf 0x1 oder
0x0 gesetzt werden (unter Verwendung von REGEDT32.EXE):

HKEY_LOCAL_MACHINE\Software\Microsoft\Command
Processor\EnableExtensions

und/oder

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

Die benutzerspezifischen Einstellungen (HKEY_CURRENT_USER) haben
gegenüber den Einstellungen für den Computer (HKEY_LOCAL_MACHINE)
Vorrang. Befehlszeilenoptionen haben Vorrang gegenüber den
Registrierungseinstellungen.
--
cu
Holger
Loading...