Mit Tastatureingabe Variable (DOS) setzen
Hallo allerseits,
ich hab das kleine Problem, daß ich den Inhalt einer Variablen via Tastatur während der Laufzeit der Batch festlegen muß. Da das ganze nicht unter Windows, sondern unter DOS laufen muß kann ich hier "Set /p" nicht benutzen. Ich habe auch schon einige Tools versucht, die ich gefunden habe (input.exe, input.com, nset.com...) aber keines von denen hat so wirklich funktioniert...
Hat da jemand zufällig etwas das läuft bzw. weiß jemand man sowas herkriegt?
MfG
piffer
ich hab das kleine Problem, daß ich den Inhalt einer Variablen via Tastatur während der Laufzeit der Batch festlegen muß. Da das ganze nicht unter Windows, sondern unter DOS laufen muß kann ich hier "Set /p" nicht benutzen. Ich habe auch schon einige Tools versucht, die ich gefunden habe (input.exe, input.com, nset.com...) aber keines von denen hat so wirklich funktioniert...
Hat da jemand zufällig etwas das läuft bzw. weiß jemand man sowas herkriegt?
MfG
piffer
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22493
Url: https://administrator.de/contentid/22493
Ausgedruckt am: 20.11.2024 um 08:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo,
ich habe da früher mal mit einer antwort.com rumgemacht, die nimmt aber jeweils nur ein Zeichen entgegen.
Kannst du dir selbst mit "debug" basteln:
-a 100
1556:0100 mov ah,8
1556:0102 int 21
1556:0104 cmp al,0
1556:0106 jnz 10a
1556:0108 int 21
1556:010A mov ah,4c
1556:010C int 21
1556:010E
-u 100 10d
1556:0100 B408 MOV AH,08
1556:0102 CD21 INT 21
1556:0104 3C00 CMP AL,00
1556:0106 7502 JNZ 010A
1556:0108 CD21 INT 21
1556:010A B44C MOV AH,4C
1556:010C CD21 INT 21
-r cx
CX 0000
:e
-n antwort.com
-w
0000E Bytes werden geschrieben.
-q
wobei hier jetzt die einzugebenden Befhle mit den Ausgaben vermischt sind... du gibst jeweils alle mit "-" beginneden Zeilen ein, sowie die Assemblerbefehle im oberen Block. Die ersten 4 Ziffern sind jeweils egal (1556), die anderen sollten gleich sein.
Der Code der gedrückten Taste liegt anschliessend in der Umgebungsvarialbe errorlevel.
Verwendung z.B.:
if errorlevel 60 echo "F2 wurde gedrückt"
Die Tastencode findest du in jeder ASCII-Tabelle (oder?) entnehmen oder ausprobieren. Bei if-Abfragen immer den höchsten Wert zuerst abfragen.
Wobei... mir fällt gerade auf: um ganze Wörter einzugeben ist das wahrscheinlich etwas kompliziert.
Filipp
ich habe da früher mal mit einer antwort.com rumgemacht, die nimmt aber jeweils nur ein Zeichen entgegen.
Kannst du dir selbst mit "debug" basteln:
-a 100
1556:0100 mov ah,8
1556:0102 int 21
1556:0104 cmp al,0
1556:0106 jnz 10a
1556:0108 int 21
1556:010A mov ah,4c
1556:010C int 21
1556:010E
-u 100 10d
1556:0100 B408 MOV AH,08
1556:0102 CD21 INT 21
1556:0104 3C00 CMP AL,00
1556:0106 7502 JNZ 010A
1556:0108 CD21 INT 21
1556:010A B44C MOV AH,4C
1556:010C CD21 INT 21
-r cx
CX 0000
:e
-n antwort.com
-w
0000E Bytes werden geschrieben.
-q
wobei hier jetzt die einzugebenden Befhle mit den Ausgaben vermischt sind... du gibst jeweils alle mit "-" beginneden Zeilen ein, sowie die Assemblerbefehle im oberen Block. Die ersten 4 Ziffern sind jeweils egal (1556), die anderen sollten gleich sein.
Der Code der gedrückten Taste liegt anschliessend in der Umgebungsvarialbe errorlevel.
Verwendung z.B.:
if errorlevel 60 echo "F2 wurde gedrückt"
Die Tastencode findest du in jeder ASCII-Tabelle (oder?) entnehmen oder ausprobieren. Bei if-Abfragen immer den höchsten Wert zuerst abfragen.
Wobei... mir fällt gerade auf: um ganze Wörter einzugeben ist das wahrscheinlich etwas kompliziert.
Filipp
Hmm, bin jetzt etwas verblüfft...
Wenn Du aus XP (Home? Prof?) eine Dos-Diskette erstellst, ist nicht die Cmd.exe, sondern die Command.com der Befehlsinterpreter?? Sonst würde ja der "Set /P" zur Verfügung stehen. Ist mir vollkommen neu - hab ich allerdings auch noch nie probiert.
Willst Du denn die "DOS"-Diskette auch an Nicht-Windows-Rechnern laufen lassen? Oder nur wieder an XP-Rechnern? Was sollen die Batche denn leisten, die auf dieser DOS-Diskette sind (müssen die lange Dateinamen verarbeiten können, NTFS lesen können, mit Partitionen größer 32 MByte oder mit Partionen > 4 GByte)?.
Oder ist das Hauptfeature das Booten-ohne-Windows-GUI?
Ein bisschen verwirrt
Biber
Wenn Du aus XP (Home? Prof?) eine Dos-Diskette erstellst, ist nicht die Cmd.exe, sondern die Command.com der Befehlsinterpreter?? Sonst würde ja der "Set /P" zur Verfügung stehen. Ist mir vollkommen neu - hab ich allerdings auch noch nie probiert.
Willst Du denn die "DOS"-Diskette auch an Nicht-Windows-Rechnern laufen lassen? Oder nur wieder an XP-Rechnern? Was sollen die Batche denn leisten, die auf dieser DOS-Diskette sind (müssen die lange Dateinamen verarbeiten können, NTFS lesen können, mit Partitionen größer 32 MByte oder mit Partionen > 4 GByte)?.
Oder ist das Hauptfeature das Booten-ohne-Windows-GUI?
Ein bisschen verwirrt
Biber
Also, piffer,
irgendwelche Freeware-Utilities a la Input.exe oder GetInput.ece bis hin zu BatEnhancer-Paketen gibt es im Internet. Wenn Du da noch mal suchen willst...
Als absolute Behelfskrücke mit Bordmitteln kann ich Dir noch was anbieten, dass ich früher mal zur Passwort-Abfrage am Prompt verwendet habe.
Hat (naturgemäß) den Nachteil, dass die eingegebenen Werte NICHT angezeigt werden.
Wenn es nur für Deinen Privat-Partitionierungsbätch ist und nicht DAU-sicher sein muss... besser als gar nichts.
Du kannst (wie geschrieben, als Behelfslösung/McGuywer-Variante) folgende Mimik in den Batch einbauen:
::----DeinBatch.bat
@echo off
Set zahl1=
format/f:160 a: >%temp%\#zahl#
for /f "tokens=6" %a in ('find "EINGABETASTE" %temp%\#zahl#') do Set Zahl1=%%a
Echo Eingegeben Zahl ist %zahl1%. Wenn falsch, Steuerung-C drücken
Pause
Set zahl2=
format/f:160 a: >%temp%\#zahl#
for /f "tokens=6" %a in ('find "EINGABETASTE" %temp%\#zahl#') do Set Zahl2=%%a
Echo Eingegeben Zahl ist %zahl2%. Wenn falsch, Steuerung-C drücken
Pause
:: etc...
~~~~~~~~~~
Du musst allerdings die Find.exe mit auf Diskette kopieren.
Vorher würde ich allerdings noch mal probieren, ob sich nicht die CMD.EXE als Command-Interpreter definieren lässt auf der DOS-Diskette.
Einfach mit auf die Diskette kopieren und eingeben:
Set Comspec=A:\CMD.EXE
Dann sollte auch der "Set /P"-Befehl funktionieren.
(Hab ich aber auch nie probiert *zugeb)
Viel Glück und poste mal Dein Ergebnis bitte
Biber
irgendwelche Freeware-Utilities a la Input.exe oder GetInput.ece bis hin zu BatEnhancer-Paketen gibt es im Internet. Wenn Du da noch mal suchen willst...
Als absolute Behelfskrücke mit Bordmitteln kann ich Dir noch was anbieten, dass ich früher mal zur Passwort-Abfrage am Prompt verwendet habe.
Hat (naturgemäß) den Nachteil, dass die eingegebenen Werte NICHT angezeigt werden.
Wenn es nur für Deinen Privat-Partitionierungsbätch ist und nicht DAU-sicher sein muss... besser als gar nichts.
Du kannst (wie geschrieben, als Behelfslösung/McGuywer-Variante) folgende Mimik in den Batch einbauen:
::----DeinBatch.bat
@echo off
Set zahl1=
format/f:160 a: >%temp%\#zahl#
for /f "tokens=6" %a in ('find "EINGABETASTE" %temp%\#zahl#') do Set Zahl1=%%a
Echo Eingegeben Zahl ist %zahl1%. Wenn falsch, Steuerung-C drücken
Pause
Set zahl2=
format/f:160 a: >%temp%\#zahl#
for /f "tokens=6" %a in ('find "EINGABETASTE" %temp%\#zahl#') do Set Zahl2=%%a
Echo Eingegeben Zahl ist %zahl2%. Wenn falsch, Steuerung-C drücken
Pause
:: etc...
~~~~~~~~~~
Du musst allerdings die Find.exe mit auf Diskette kopieren.
Vorher würde ich allerdings noch mal probieren, ob sich nicht die CMD.EXE als Command-Interpreter definieren lässt auf der DOS-Diskette.
Einfach mit auf die Diskette kopieren und eingeben:
Set Comspec=A:\CMD.EXE
Dann sollte auch der "Set /P"-Befehl funktionieren.
(Hab ich aber auch nie probiert *zugeb)
Viel Glück und poste mal Dein Ergebnis bitte
Biber