Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ja-Nein Abrage unter Windows XP,2000

Frage Entwicklung Batch & Shell

Mitglied: racer23

racer23 (Level 1) - Jetzt verbinden

06.01.2010, aktualisiert 14:42 Uhr, 4258 Aufrufe, 6 Kommentare

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.
Mitglied: laster
06.01.2010 um 13:38 Uhr
Hallo,

01.
set /p JN=[J]a oder [N]ein: 
02.
 
03.
if "%JN%"=="j" goto P1 
04.
if "%JN%"=="J" goto P1 
05.
if "%JN%"=="n" goto P2 
06.
if "%JN%"=="N" goto P2 
07.
 
08.
goto ENDE 
09.
 
10.
:P1 
11.
echo Antwort ist Ja 
12.
goto ENDE 
13.
 
14.
:P2 
15.
echo Antwort ist Nein 
16.
goto ENDE 
17.
 
18.
:ENDE 
19.
set JN=
statt echo ... stehen dann die gewünschten Befehle...

vG LS
Bitte warten ..
Mitglied: racer23
06.01.2010 um 14:01 Uhr
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?
Bitte warten ..
Mitglied: bastla
06.01.2010 um 14:17 Uhr
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
Bitte warten ..
Mitglied: racer23
06.01.2010 um 14:28 Uhr
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)
Bitte warten ..
Mitglied: bastla
06.01.2010 um 14:35 Uhr
Hallo racer23!
könnte das vielleicht " :: " sein?
Richtig; alternativ dazu auch mit REM - zB gelegentlich erforderlich in einem mehrzeiligen "if", wie etwa:
01.
if /i "%JN%=="j" ( 
02.
    REM Machen wir's ... 
03.
    echo Antwort ist Ja 
04.
    goto ENDE 
05.
)
[Edit] Suboptimales Beispiel - hier ginge es auch mit "::" ... [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: racer23
06.01.2010 um 14:38 Uhr
Ok, nochmals vielen Dank bastla!
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Windows XP
Windows XP 2TB Datenplatte nur mit 1TB beschreibbar (11)

Frage von hajo2121 zum Thema Windows XP ...

Windows XP
Windows XP und die Atom-U-Boote in Großbritannien (6)

Link von transocean zum Thema Windows XP ...

Windows XP
gelöst WPA2 unter Windows XP SP1 nutzen? (10)

Frage von bestelitt zum Thema Windows XP ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (32)

Frage von Maik82 zum Thema Linux Netzwerk ...

CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (20)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (16)

Frage von smartino zum Thema Mac OS X ...

Hardware
gelöst PCI-Express-Adapterfrage (14)

Frage von DerWoWusste zum Thema Hardware ...