![]() |
Ersatz für Batch Befehl CHOICE ?
Hallo Leute
Ich krame gerade in meinen alten Batch-Dateien. Zumindest bei WinXP kennt der CMD Interpreter den Befehl CHOICE nicht mehr. Gibt es eine Alternative? :gruebel: Hier ein Beispiel:
Code:
@echo off
CLS :loop1 echo Bitte Netzwerkkartentreiber wählen: echo echo 1 = Dell Latitude C840 echo 2 = PC .. choice /c:12 if errorlevel 2 goto net2 if errorlevel 1 goto net1 goto loop1 :net1 echo \net\netbind.com goto exit :net2 echo \net\net... goto exit :exit EXIT |
Re: Ersatz für Batch Befehl CHOICE ?
Hi.
Schau dir mal den Schalter /P des SET-Befehls an. Damit sollte sich was reißen lassen. Grüße vom marabu |
Re: Ersatz für Batch Befehl CHOICE ?
Code:
Ein Beispiel.
@ECHO OFF
CLS :Start ECHO. ECHO [1] Start Nummer 1 ECHO [2] Start Nummer 2 ECHO [3] Beenden ECHO. SET choice= SET /P choice=Bitte Auswählen (1 bis 3): IF NOT ´%choice%´==´´ SET choice=%choice:~0,1% if ´%choice%´==´1´ goto Run1 if ´%choice%´==´2´ goto Run2 if ´%choice%´==´3´ goto Exit ECHO "%choice%" ist keine gültige Eingabe. Bitte noch einmal: ECHO. GOTO Start :Run1 ECHO Start Nummer 1 REM ... goto end :Run2 Start Nummer 2 REM ... goto end :Exit ECHO Beendet durch User GOTO End :End |
Re: Ersatz für Batch Befehl CHOICE ?
Zitat:
|
Re: Ersatz für Batch Befehl CHOICE ?
Hi Sharky,
wenn ich Unmengen an choice-verseuchten Script-Code hätte, dann würde ich CHOICE aus dem W2K3 resource kit holen. Wenn nicht, dann nehme ich doch lieber einen internen Befehl der command shell mit vergleichbarer Funktionalität. Grüße vom marabu |
Re: Ersatz für Batch Befehl CHOICE ?
Also mein Batch sieht jetzt so aus:
Code:
Dank an marabu und turboPASCAL :thumb:
@ECHO OFF
CLS :Start ECHO. ECHO [1] Dell Latitude C840 ECHO [2] PC001 ECHO [3] Abbruch ECHO. SET choice= SET /P choice=Bitte Auswählen (1 bis 3): IF NOT ´%choice%´==´´ SET choice=%choice:~0,1% if ´%choice%´==´1´ goto Run1 if ´%choice%´==´2´ goto Run2 if ´%choice%´==´3´ goto Exit ECHO "%choice%" ist keine gueltige Eingabe. Bitte noch einmal: ECHO. GOTO Start :Run1 echo \net\netbind.com REM ... goto end :Run2 echo \net\net... REM ... goto end :Exit ECHO Beendet durch User GOTO End :End Einziger Wermutstropfen ist die Reaktion wenn nur die Return-Taste betätigt wird:
Code:
Das würde ich gern noch abfangen.
"┤==┤1┤" ist syntaktisch an dieser Stelle nicht verarbeitbar.
|
Re: Ersatz für Batch Befehl CHOICE ?
Welches Betriebssystem und gff. welcher Zeichensatz (DOS) ?
Du kannst das ja auch mit einer kleinen Konsolenanwendung machen, Sichwort ![]() :gruebel: |
Re: Ersatz für Batch Befehl CHOICE ?
Zitat:
Zitat:
Aber ich denke ich kann schon gut mit dem aktuellen batch leben... Nochmals vielen Dank für die Tips :hi: |
Re: Ersatz für Batch Befehl CHOICE ?
Zitat:
|
Re: Ersatz für Batch Befehl CHOICE ?
Ahoi,
Zitat:
bye, Andy |
Re: Ersatz für Batch Befehl CHOICE ?
Das soll nicht funktionieren ?
Delphi-Quellcode:
program Dings;
{$APPTYPE CONSOLE} uses Windows; procedure Exec(FullFileName: String); var Err : Integer; begin Err := WinExec(@FullFileName[1], SW_SHOWNORMAL); if Err <= 31 then begin WriteLn(''''+FullFileName+''''); case Err of 0 : WriteLn('The system is out of memory or resources.'); ERROR_BAD_FORMAT : WriteLn('The .EXE file is invalid (non-Win32 .EXE'+ ' or error in .EXE image).'); ERROR_FILE_NOT_FOUND : WriteLn('The specified file was not found.'); ERROR_PATH_NOT_FOUND : WriteLn('The specified path was not found.'); else WriteLn('Unkown Error'); end; // Halt; end; end; procedure WriteChars(AnyChar: Char; Count: Word; NewLine: Boolean); var i: Word; begin for i := 0 to Count do Write(AnyChar); if NewLine then Writeln; end; function MyStrToInt(s: string; var i: integer): Boolean; var Err: Integer; begin val(s, i, err); if err <> 0 then MyStrToInt := False else MyStrToInt := True; end; var s: string; n: Integer; begin WriteLn; WriteChars('-', 40, TRUE); WriteLn; WriteLn('[1] - Dell Latitude C840'); WriteLn('[2] - PC001'); WriteLn('[3] - Abbruch'); WriteLn; WriteChars('-', 40, TRUE); WriteLn; repeat Write('Ihre Auswahl: '); Readln(s); if MyStrToInt(s, n) then begin case n of 1: Exec('c:\net\netbind.com'); 2: Exec('c:\net\net.exe'); 3: WriteLn('Abbruch durch User.'); else Write('Unzulaessige Eingabe. '); end; end else Write('Unzulaessige Eingabe. '); until n in [1..3]; end. |
Re: Ersatz für Batch Befehl CHOICE ?
Zitat:
|
Re: Ersatz für Batch Befehl CHOICE ?
Es gibt ja auch noch Turbo Pascal 5,6,7 oder Delphi 1 oder ... ;)
Delphi-Quellcode:
Done.
program dings;
{$M $16000,0,0 } {----------------------------------------------------------------} uses Dos; procedure Exec_(App, Param: string); begin SwapVectors; Exec(App, Param); SwapVectors; if DosError <> 0 then begin Case DosError of 2: Writeln('DosError: File not found'); 3: Writeln('DosError: Path not found'); 6: Writeln('DosError: Invalid handle'); 8: Writeln('DosError: Not enough memory'); else WriteLn('Dos error #', DosError); end; Halt; end; end; {----------------------------------------------------------------} procedure WriteChars(AnyChar: Char; Count: Word; NewLine: Boolean); var i: Word; begin for i := 0 to Count do Write(AnyChar); if NewLine then Writeln; end; function MyStrToInt(s: string; var i: integer): Boolean; var Err: Integer; begin val(s, i, err); if err <> 0 then MyStrToInt := False else MyStrToInt := True; end; var s: string; n: Integer; begin WriteLn; WriteChars('-', 40, TRUE); WriteLn; WriteLn('[1] - Dell Latitude C840'); WriteLn('[2] - PC001'); WriteLn('[3] - Abbruch'); WriteLn; WriteChars('-', 40, TRUE); WriteLn; repeat Write('Ihre Auswahl: '); Readln(s); if MyStrToInt(s, n) then begin case n of 1: Exec_('c:\net\netbind.com', ''); 2: Exec_('c:\net\net.exe', ''); 3: WriteLn('Abbruch durch User.'); else Write('Unzulaessige Eingabe. '); end; end else Write('Unzulaessige Eingabe. '); until n in [1..3]; end. |
Re: Ersatz für Batch Befehl CHOICE ?
Hallo,
zur Information, falls es noch für andere wichtig ist: Ich habe für einen Kunden heute genau dieses Problem lösen müssen und festgestellt: Es ist grundsätzlich kein Problem, choice.com (in meinem Fall von Win95) zu kopieren und im cmd-Fenster von WinXP durch eine Batchdatei aufzurufen. Es ist lediglich (wie immer) darauf zu achten, dass dieses Hilfsprogramm auch über den Pfad erreichbar ist. Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz