Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

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

Tomtimo / 7 Antworten / Flachansicht 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
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