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, 4255 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
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

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

Frage von bestelitt zum Thema Windows XP ...

Windows XP
Kann man noch neue Notebooks für Windows XP kaufen ? (9)

Frage von DieterJansen zum Thema Windows XP ...

Windows Netzwerk
SMBv2 in Windows 7 - Windows XP - Windows Server 2003 Domäne deaktivieren (4)

Frage von Mario.Steinberg zum Thema Windows Netzwerk ...

Windows XP
gelöst Windows XP SP 3 System Clonen (19)

Frage von zeroblue2005 zum Thema Windows XP ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...