racer23
Goto Top

Ja-Nein Abrage unter Windows XP,2000

Habe unter Windows 7 eine Batch-Datei geschrieben. In dieser kommt mehrmals der Befehl choice vor.
Soweit ich weiß gibt es diesen aber bei Windows XP und 2000 nicht.

Hi,

Ich habe eine Batch-Datei zur Verwendung von Xcopy geschrieben. Mit dieser kann ich z.B. den Inhalt einer CD/DVD auf einen USB-Stick oder Festplatte kopieren. Beim erstellen eines Bootbaren USB-Sticks ist das ganz praktisch da so auch versteckte Dateien kopiert werden. Ich habe dabei mehrfach den Befehl choice angewandt. Dieser funktionniert aber soweit ich weiß nicht unter Windows XP oder 2000.
Deshalb würde ich gerne wissen wie man so eine Ja/Nein-Abrage erstellen kann, dass sie auch unter XP/2000 läuft?
(Ich weiß, dass es viel einfacher wäre den Befehl "xcopy" einfach in die Eingabeaufforderung einzugeben, aber ich experimentiere eben gerne.)
Hier seht ihr den Anfang meiner Batch-datei: (Die kompletter wäre etwas zu lang. Aber wenn ihr mir sagt wie oder ob es überhaupt geht, kann ich sie gerne hier hochladen.)

Ich kann mir auch gut vorstellen, dass ich dabei vieles etwas zu umständlich gemacht habe

@echo off
:begin
color 0C
echo Programm zur Verwendung von Xcopy
echo.
echo.
echo Geben sie den Lauwerkbuchstaben des Zielverzeichnisses an.
CHOICE /C CDEFGHIJKLMN /M "C=C:\ D=D:\ ..."

IF %ERRORLEVEL% EQU 1 goto copytoC
IF %ERRORLEVEL% EQU 2 goto copytoD
IF %ERRORLEVEL% EQU 3 goto copytoE
IF %ERRORLEVEL% EQU 4 goto copytoF
IF %ERRORLEVEL% EQU 5 goto copytoG
IF %ERRORLEVEL% EQU 6 goto copytoH
IF %ERRORLEVEL% EQU 7 goto copytoI
IF %ERRORLEVEL% EQU 8 goto copytoJ
IF %ERRORLEVEL% EQU 9 goto copytoK
IF %ERRORLEVEL% EQU 10 goto copytoL
IF %ERRORLEVEL% EQU 11 goto copytoM
IF %ERRORLEVEL% EQU 12 goto copytoN

:copytoC
echo Geben Sie den Laufwerkbuchstaben des Quellverzeichnisses ein.
CHOICE /C CDEFGHIJKLMN /M "C=C:\ D=D:\ ..."

IF %ERRORLEVEL% EQU 1 goto CopyFromC
[ ... ]
IF %ERRORLEVEL% EQU 12 goto CopyFromN

:CopyFromC
echo.
echo Moechten sie das Kopieren starten?
echo C:\ nach C:\
echo.
echo Waehlen Sie N aus um Quell- und Zielverzeichnis neu zu definieren.
CHOICE /C JNA /M "J=Ja N=Nein A=Abrechen"
IF %ERRORLEVEL% EQU 1 goto startCC
IF %ERRORLEVEL% EQU 2 goto begin
IF %ERRORLEVEL% EQU 3 goto ende

... hier geht es eigentlich noch weiter

Würde mich über ein paar Tipps und verbesserungsvorschläge was die Batch betrifft sehr freuen.

Content-Key: 132809

Url: https://administrator.de/contentid/132809

Printed on: April 20, 2024 at 07:04 o'clock

Member: laster
laster Jan 06, 2010 at 12:38:34 (UTC)
Goto Top
Hallo,

set /p JN=[J]a oder [N]ein:

if "%JN%"=="j" goto P1  
if "%JN%"=="J" goto P1  
if "%JN%"=="n" goto P2  
if "%JN%"=="N" goto P2  

goto ENDE

:P1
echo Antwort ist Ja
goto ENDE

:P2
echo Antwort ist Nein
goto ENDE

:ENDE
set JN=

statt echo ... stehen dann die gewünschten Befehle...

vG LS
Member: racer23
racer23 Jan 06, 2010 at 13:01:29 (UTC)
Goto Top
Hi, danke für deine schnelle Antwort.

Es hat alles gut funktioniert.

Hat das "set JN=" bei :ENDE eigentlich noch irgendwas zu bedeuten oder könnte man da auch einfach exit schreiben?
Member: bastla
bastla Jan 06, 2010 at 13:17:32 (UTC)
Goto Top
Hallo racer23!
Hat das "set JN=" bei :ENDE eigentlich noch irgendwas zu bedeuten
Es ersetzt das zumeist am Anfang eines Batches verwendet "setlocal" und erreicht damit, dass die Variable %JN% nach Ende des Batches nicht mehr existiert (damit sie nicht ev in einem anderen Batch - bereits mit der letzten Auswahl vorbelegt - "auftaucht").
oder könnte man da auch einfach exit schreiben?
Ein "exit" ohne Zusatz ist an dieser Stelle sinnlos (bzw kontraproduktiv, da es auch noch das Testen direkt von der Kommandozeile - durch Schließen der CMD-Shell - erschwert).
Noch als Anmerkung: Mit
if /i "%JN%"=="j" goto P1
erübrigt sich die Unterscheidung Groß-/Kleinschreibung (und damit das zweite "if" zum selben Thema).

Grüße
bastla
Member: racer23
racer23 Jan 06, 2010 at 13:28:23 (UTC)
Goto Top
Ok, vielen Dank.

Also bei " if /i " wird nicht auf Groß- und Kleinschreibung geachtet.

und ich hätte noch ne kleine Frage:

Wie kann man in einer Bacht-Datei eigentlich ein Kommentar abgeben. Das geht nich mit // ,oder?

könnte das vielleicht " :: " sein? (das habe ich schon mal irgendwo gesehen)
Member: bastla
bastla Jan 06, 2010 at 13:35:29 (UTC)
Goto Top
Hallo racer23!
könnte das vielleicht " :: " sein?
Richtig; alternativ dazu auch mit REM - zB gelegentlich erforderlich in einem mehrzeiligen "if", wie etwa:
if /i "%JN%=="j" (  
    REM Machen wir's ...  
    echo Antwort ist Ja
    goto ENDE
)

[Edit] Suboptimales Beispiel face-sad - hier ginge es auch mit "::" ... [/Edit]

Grüße
bastla
Member: racer23
racer23 Jan 06, 2010 at 13:38:50 (UTC)
Goto Top
Ok, nochmals vielen Dank bastla!