Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Finde den Fehler in einer Batch-Datei nicht. Es geht um den CHOI

Tomtimo / 7 Antworten / Baumansicht Nickles

Hallo,


ich habe folgendes Problem, bei einer Batch-Datei. Es soll eine Abfrage gemacht werden, ob eine Datei kopiert wird, oder nicht.


Hier mal ein Auszug aus der Batch-Datei:


-------------------------------------------------------------------------------------------------------------
@echo.
@echo.
@echo Press any key to continue . . .
@echo off
pause
choice  Soll das Image wirklich geschrieben werden?
if errorlevel==j goto copy
if errorlevel==n goto exit
:copy
d:\ghost.exe -clone,MODE=load,SRC=d:\AUG2004.GHO,DST=1 -batch
goto exit
:exit
-------------------------------------------------------------------------------------------------------------


Wenn ich bei der Abfrage "n" eingebe, will er die Datei trotzdem kopieren, obwohl er dann zur Sprungmarke :exit gehen soll.
Warum?


Vielen Dank für eure Hilfe!

bei Antwort benachrichtigen
Andreas42 Tomtimo „Finde den Fehler in einer Batch-Datei nicht. Es geht um den CHOI“
Optionen

Hi!

Die Auswertung von Errorlevel stimmt nicht. Errorlevel liefert nur Zahlen zurück keine Buchstaben.

Einen Link mit Info zu Choice gibt's hier

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Tomtimo Nachtrag zu: „Finde den Fehler in einer Batch-Datei nicht. Es geht um den CHOI“
Optionen

Hallo,

Danke für die Antwort. Aber leider klappt es mit den Zahlen anstatt den Buchstaben auch nicht. Das hatte ich auch schon ausprobiert. Der Quelltext sieht jetzt so aus:

-------------------------------------------------------------------------------------------------------------
@echo.
@echo.
@echo Press any key to continue . . .
@echo off
pause
choice /C:YN Soll das Image wirklich geschrieben werden?
IF ERRORLEVEL 1 GOTO copy
IF ERRORLEVEL 2 GOTO exit
:copy
d:\ghost.exe -clone,MODE=load,SRC=d:\AUG2004.GHO,DST=1 -batch
goto exit
:exit
-------------------------------------------------------------------------------------------------------------

Der Fehler bleibt immernoch der gleiche. Bei N (ERRORLEVEL 2) will er immernoch kopieren.

bei Antwort benachrichtigen
mr.escape Tomtimo „Hallo, Danke für die Antwort. Aber leider klappt es mit den Zahlen anstatt den...“
Optionen

Vertausch mal die zeilen mit "IF ERRORLEVEL ..." so, dass die zahlen absteigend aufgelistet sind.
Hier also:
IF ERRORLEVEL 2 GOTO exit
IF ERRORLEVEL 1 GOTO copy

Kommen noch mehr optionen mit höheren errorleveln dazu, müssen diese ebenso absteigend abgefragt werden, also VOR den jetztigen.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Andreas42 Tomtimo „Hallo, Danke für die Antwort. Aber leider klappt es mit den Zahlen anstatt den...“
Optionen

Hi!

Nur als nachträglicher Hinweis:

IF ERRORLEVEL macht immer einen grösser-gleich Vergleich. Deshalb geht er bei der ersten Abfrage nach 1 auch zu Copy, wenn der Wert 2 kommt (der halt grösser als 1 ist...).
Eine typische Stolperfalle in den alten DOS-Batches.

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Zacharias Tomtimo „Finde den Fehler in einer Batch-Datei nicht. Es geht um den CHOI“
Optionen

@echo.
@echo.
@echo Press any key to continue . . .
@echo off
pause
choice Soll das Image wirklich geschrieben werden?
if errorlevel==j goto copy
if errorlevel==n goto exit
:copy
d:\ghost.exe -clone,MODE=load,SRC=d:\AUG2004.GHO,DST=1 -batch
goto exit
:exit
----------------------------------------------------------------

Ich glaube es sollte so aussehen:

@echo off
pause
choice /C:JJnn Soll das Image wirklich geschrieben werden?

if ERRORLEVEL 4 GOTO exit
if ERRORLEVEL 3 GOTO exit

if ERRORLEVEL 2 GOTO copy
if ERRORLEVEL 1 GOTO copy


:copy
d:\ghost.exe -clone,MODE=load,SRC=d:\AUG2004.GHO,DST=1 -batch

:exit
________________________________

Das "@echo off" machst du gleich am Anfang. dann kannst immer eine Leerzeile ausgeben ("echo.") oder einen text schreiben ("echo blablabla").
Den Text "Press any key to continue . . ." musst du nicht extra ausgeben, da dieser Standardmäßig vom Kommando "pause" ausgegeben wird.


Bei "choice" gibst du den Parameter "/C:" an ... dann kannst du die tasten festlegen, leider kann ich die BATCH File jetzt nicht testen, und dir auch nicht sagen obs funktioniert. Ich hab jetzt einfach "Jj" und "Nn" zur auswahl gegeben, weil ich nicht weiß ob der Groß- und kleinbuchstaben unterscheidet. Anschließend kommt der Text, der ausgegeben werden soll.

Danach werden nur werte zurückgeliefert.

J ... j ... N ... n
1 ... 2 ... 3 ... 4

Die kannst du dann prüfen.

Bei den Errorlevels:

ich glaube es würde auch so gehen

IF ERRORLEVEL 4
IF ERRORLEVEL 3 GOTO exit

weil wenn er die '4' bekommt, hüpft er weiter zur drei, weil bei '4' keine anweisung steht und somit ebenfalls zu "exit". Aber heutzutage muss man eh nicht mehr sparen, also schreibs einfach hin.


Nach der Sprungmarke ":copy" musst du zum schluss auch nicht extra "goto exit" angeben. Zumindest nicht in diesem Beispiel. weil wenn ":copy" ausgeführt wird, kommt er anschließend gleich ins "exit".

Naja, ich hoffe ich konnte dir helfen, wie gesagt, ich konnte das ganze nicht testen, und bei mir ist es schon eine weile her als ich das gemacht habe, d.h. meine Version könnte durchaus noch fehler enthalten dir mir jett nicht aufgefallen sind.

mfg
Zacharias

bei Antwort benachrichtigen
Zacharias Tomtimo „Finde den Fehler in einer Batch-Datei nicht. Es geht um den CHOI“
Optionen

ups ... da kam ich wohl zu spät ;-)

bei Antwort benachrichtigen
Tomtimo Nachtrag zu: „Finde den Fehler in einer Batch-Datei nicht. Es geht um den CHOI“
Optionen

Hallo,

danke! Es lag an der Reiehnfolge. Das "Press any key to continue" habe ich wegen der Sprachversion extra eingebaut, da die Batch in Frankreich eingesetzt werden soll. Auf der CD aber ein deutsches DOS ist. Den Rest werde ich auch noch in Englisch reintippen.

Nochmals Vielen Dank für die schnelle Hilfe. Es klappt jetzt.

bei Antwort benachrichtigen