
DOKUMENTATION

LESEN UND AKZEPTIEREN VON BENUTZER-EINGABEN
in MS-DOS-Batchdateien



Windows 2000 und hher kennt in seinem DOS-Bereich den Befehl

'SET/P'

als Eingabeverwertung. Die Benutzereingabe kann anschlieend als
Variable in weiteren Schritten verwendet werden.


Fr das altes DOS bis Windows 9x mu man jedoch ein Umweg nehmen.


Hier wurde eine Modifikation vom bereits in COPYDAT.ZIP verwendeten
DOS-SKRIPT aus

http://www.ericphelps.com/batch/samples/samples.htm
bzw.
http://www.ericphelps.com/batch/samples/rootname.bat.txt


mit dem gefrchteten, beispielsweise in

http://www.robvanderwoude.com/userinput.php

beschriebenen 	'COPY CON'	- Befehl
und der 	'NUL'		- Anweisung

kombiniert.


Ebenfalls zum Einsatz kommt die CHOICE- Anweisung aus DOS/Windows 9x.

In Windows 2000 und hher mu dazu die DOS-Anwendung REPLY.COM o..
eingesetzt und das Skript entsprechend abgendert werden.



NACHTRAG:

In Windows 7 (ab Vista) ist CHOICE in der DOS (CMD-) Box wieder verfgbar -
allerdings hat sich die Syntax gendert, mit der dieser Befehl angesprochen
werden kann, so da ltere Batch-Dateien mit CHOICE mit einer Fehlermeldung
abbrechen.


Dabei sind die nderungen kleinlich:

Syntax in Windows 98 (DOS):

choice /C:JN " OK? Ja\Nein "


Dieselbe Syntax in Windows 7:

choice /C JN /M  " OK? Ja\Nein "



Das eine ist DOS, das andere Windows. Die Syntaxe sind nicht kompatibel.





Die folgenden Skripte mssen dementsprechend hier abgewandelt werden.


Alternativ dazu kann eine Skript-Weiche eingebaut werden:

Siehe http://en.wikipedia.org/wiki/Ver_(command)


Findet Windows - Versionen ab Vista:

ver | find "6."  > nul

if not ERRORLEVEL 1 GOTO W7
if ERRORLEVEL 1 GOTO W98

:W98
choice /C:JN " OK? Ja\Nein "
Goto Weiter

:W7
choice /C JN /M  " OK? Ja\Nein "
Goto Weiter

:Weiter




EINZELHEITEN


- Es knnen pro Skript bis zu acht Variablen (%2-%9) eingegeben
werden.

- Ausgelesen knnen sowohl bereits vorliegende, wie auch durch
Benutzereingabe ad hoc generierte Textdateien.

- Hierzu wird mit Hilfe von 'COPY CON' eine Textdatei generiert, die
anschlieend von einer temporren Batch-Kombination ausgelesen wird.

- Die dazu notwendige Batch-Datei 'KN_UMBR1.BAT' sollte nicht verndert
werden; und wenn doch, darf sie auf keinen Fall einen Zeilenumbruch
enthalten!



- Die Dateien '_INHALT.TXT' und '_TEST.TXT' dienen als Demonstrations-
Dateien

- Das an den 'COPY'- Befehl angefgte '> nul' dient der Unterdrckung
der entbehrlichen Meldung "x Datei(en) kopiert".

  (Diese Anweisung unterdrckt JEDE Meldung in DOS)


- 'ECHO.' erzeugt eine Leerzeile und unterdrckt die Fehlermeldung.





BEISPIELE


Die folgenden Batch-Dateien zeigen verschiedenen Mglichkeiten auf,
diese Befehlskombinationen einzusetzen. In Eingabe 1 wird die vorliegen
Textdatei '_INHALT.TXT' ausgelesen und verwertet.

In Eingabe 2 und 3 wird tatschlich eine Eingabe verwertet. In Eingabe 3
kommt zur Demonstration zustzlich die Anwendung 'HTPASSWD.EXE' zum
Einsatz, welche codierte Pawrter fr Unix-Server generiert (diese
knnen dann  mit der Datei .HTACCESS fr Benutzer-Webseiten verwendet
werden).

Mit Hilfe des Skriptes kann sie mit einer Batch-Datei aufgerufen
werden, in die der Name und das Pawort direkt eingegeben werden knnen.


Die folgenden Batch-Dateien sind im Archiv enthalten.




EINGABE 1

- Liest die Textdatei '_INHALT.TXT' aus und benennt die Textdatei
'_TEST.TXT' anhand der gefundenen Zeichenfolgen um.

Bitte den folgenden Code kopieren und als .BAT-Datei abspeichern:



@Echo Off

REM Bentigt werden noch die Datei 'kn_umbr1.bat'
REM Bestehend aus der Zeile 'Hole '
REM - Ohne Umbruch, aber mit Leerzeichen am Ende!

REM Sowie ggf. die delay.com

REM VORLAUF


REM HOLT _INHALT.TXT

copy _INHALT.TXT  Inhalt2.txt >nul


echo.
echo Inhalt der Eingabe-Datei:
echo _
REM type Inhalt2.txt
sort /R Inhalt2.txt

echo.
echo -
echo Ende Inhalt der Eingabe
echo.

echo.
echo Der Vorlauf ist abgeschlossen
echo.

PAUSE



REM ----



REM VORLAGE Hole var1 zu ZW

type kn_umbr1.bat>ZW.bat



REM ADDIERT NAMEN zu ZW:

REM 1 Variable = 1 Wort. Keine Leerzeichen.
REM MAXIMAL : echo set var1=%%1%%2%%3%%4%%5%%6%%7%%8%%9>Hole.bat
REM ODER : echo set var1=%%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>Hole.bat

REM So knnen bis zu 9 Zeilenteile als Variable geholt werden
REM - Getrennt oder Zusammengefgt


REM Durch SORT Leerzeilen-Eingabefehler abfangen
REM /_R bewirkt: Leerzeilen nach unten.
REM Alphabetisch sortiert sind die Leerzeilen oben.

REM Sonst SORT ohne /_R oder TYPE

sort /R Inhalt2.txt>>ZW.bat



REM Variablen holen:

echo.
echo Variablen werden gesetzt
echo.
echo Anzahl der Variablen: 1
echo.


REM Festlegen der gesuchten Variablen
echo set var1=%%1>Hole.bat

REM Holen derselben
call ZW.bat

echo 2
echo set var2=%%2>Hole.bat
call ZW.bat

echo.
PAUSE

REM PRFUNG: REM vor SET entfernen
REM set

PAUSE

echo.
echo Erkannte Variablen:

echo var1: '%var1%'
echo var2: '%var2%'


echo.
choice /c:jn OK? Ja\Nein
if errorlevel 2 goto ENDE
echo.
echo.

REM PAUSE

echo. Ausfuehrung

REM Eigentlich gehrt hier eine FOR-Schleife hin
REM Aber man kann mit den Variablen ja unterschiedliches anstellen


echo.
IF "%var1%"=="" echo. Variable 1 existiert nicht
IF "%var1%"=="" GOTO NEXT1


echo.
echo. Kopiere _TEST.TXT als var1_%var1%.txt
copy _TEST.TXT var1_%var1%.txt >nul
echo.
:NEXT1


IF "%var2%"=="" echo. Variable 2 existiert nicht
IF "%var2%"=="" GOTO NEXT2
echo.
echo. Kopiere _TEST.TXT als var1_%var2%.txt
copy _TEST.TXT var1_%var2%.txt >nul
echo.
:NEXT2


echo.
PAUSE

REM ABSCHLUSS
echo.

:ENDE

echo:
echo Ende
echo.

REM Beseitigt Zwischenergebnisse:

del Inhalt2.txt
del Hole.bat
del ZW.bat


PAUSE
echo Schliesse in 10 Sekunden
delay 10
CLS








EINGABE 2

- Liest die Benutzereingabe aus und benennt die Textdatei '_TEST.TXT'
anhand der gefundenen Zeichenfolgen um.

Bitte den folgenden Code kopieren und als .BAT-Datei abspeichern:



@Echo Off

REM Bentigt werden noch die Datei 'kn_umbr1.bat'
REM Bestehend aus der Zeile 'Hole '
REM - Ohne Umbruch, aber mit Leerzeichen am Ende!

REM Sowie ggf. die delay.com

REM VORLAUF


echo.
echo Eine Zeile Text eingeben, dann
echo F6 druecken
echo Enter druecken
echo.

REM Texteingabe:
copy con Name.txt >nul

IF NOT EXIST Name.txt GOTO LEER1
copy Name.txt Inhalt2.txt >nul

echo.
echo Inhalt der Eingabe:
echo _
REM type Inhalt2.txt
sort /R Inhalt2.txt

echo.
echo -
echo Ende Inhalt der Eingabe
echo.

echo.
echo Der Vorlauf ist abgeschlossen
echo.

PAUSE



REM ----



REM VORLAGE Hole var1 zu ZW

type kn_umbr1.bat>ZW.bat



REM ADDIERT NAMEN zu ZW:

REM 1 Variable = 1 Wort. Keine Leerzeichen.
REM MAXIMAL : echo set var1=%%1%%2%%3%%4%%5%%6%%7%%8%%9>Hole.bat
REM ODER : echo set var1=%%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>Hole.bat

REM So knnen bis zu 9 Zeilenteile als Variable geholt werden
REM - Getrennt oder Zusammengefgt


REM Durch SORT Leerzeilen-Eingabefehler abfangen
REM /_R bewirkt: Leerzeilen nach unten.
REM Alphabetisch sortiert sind die Leerzeilen oben.

REM Sonst SORT ohne /_R oder TYPE

sort /R Inhalt2.txt>>ZW.bat



REM Variablen holen:

echo.
echo Variablen werden gesetzt
echo.
echo Anzahl der Variablen: 1
echo.


REM Festlegen der gesuchten Variablen
echo set var1=%%1>Hole.bat

REM Holen derselben
call ZW.bat

echo 2
echo set var2=%%2>Hole.bat
call ZW.bat

echo.
PAUSE

:LEER1


REM PRFUNG: REM vor SET entfernen
REM set

PAUSE

echo.
echo Erkannte Variablen:

echo var1: '%var1%'
echo var2: '%var2%'


echo.
choice /c:jn OK? Ja\Nein
if errorlevel 2 goto ENDE
echo.
echo.

REM PAUSE

echo. Ausfuehrung

REM Eigentlich gehrt hier eine FOR-Schleife hin
REM Aber man kann mit den Variablen ja unterschiedliches anstellen


echo.
IF "%var1%"=="" echo. Variable 1 existiert nicht
IF "%var1%"=="" GOTO NEXT1


echo.
echo. Kopiere _TEST.TXT als var1_%var1%.txt
copy _TEST.TXT var1_%var1%.txt >nul
echo.
:NEXT1


IF "%var2%"=="" echo. Variable 2 existiert nicht
IF "%var2%"=="" GOTO NEXT2
echo.
echo. Kopiere _TEST.TXT als var1_%var2%.txt
copy _TEST.TXT var1_%var2%.txt >nul
echo.
:NEXT2


echo.
PAUSE

REM ABSCHLUSS
echo.

:ENDE

echo:
echo Ende
echo.

REM Beseitigt Zwischenergebnisse:

del Name.txt
del Inhalt2.txt
del Hole.bat
del ZW.bat


PAUSE
echo Schliesse in 10 Sekunden
delay 10
CLS








EINGABE 3

- Liest die Benutzereingabe aus und gibt sie in die Anwendung
'HTPASSWD.EXE' ein.

Bitte den folgenden Code kopieren und als .BAT-Datei abspeichern:



@Echo Off

REM Bentigt werden noch die Datei 'kn_umbr1.bat'
REM Bestehend aus der Zeile 'Hole '
REM - Ohne Umbruch, aber mit Leerzeichen am Ende!

REM Sowie ggf. die delay.com

REM VORLAUF

REM Option: Vorherige Ergebnisse lschen
REM Sonst werden die Ergebnisse aneinandergefgt

del Passwort.txt

echo.
echo Passwort Codieren
echo.
echo Nur einen Namen eingeben, dann
echo.
echo. F6 druecken
echo. Enter druecken
echo.
echo Eingabe:
echo.

REM Texteingabe:
copy con Name.txt >nul

IF NOT EXIST Name.txt GOTO LEER1
copy Name.txt Inhalt2.txt >nul

echo.
echo Inhalt der Eingabe:
echo _
REM type Inhalt2.txt
sort /R Inhalt2.txt

echo.
echo -
echo Ende Inhalt der Eingabe
echo.

echo.
echo Der Vorlauf ist abgeschlossen
echo.

PAUSE



REM ----



REM VORLAGE Hole var1 zu ZW

type kn_umbr1.bat>ZW.bat



REM ADDIERT NAMEN zu ZW:

REM 1 Variable = 1 Wort. Keine Leerzeichen.
REM MAXIMAL : echo set var1=%%1%%2%%3%%4%%5%%6%%7%%8%%9>Hole.bat
REM ODER : echo set var1=%%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>Hole.bat

REM So knnen bis zu 9 Zeilenteile als Variable geholt werden
REM - Getrennt oder Zusammengefgt


REM Durch SORT Leerzeilen-Eingabefehler abfangen
REM /_R bewirkt: Leerzeilen nach unten.
REM Alphabetisch sortiert sind die Leerzeilen oben.

REM Sonst SORT ohne /_R oder TYPE

sort /R Inhalt2.txt>>ZW.bat



REM Variablen holen:

echo.
echo Variablen werden gesetzt
echo.
echo Anzahl der Variablen: 1
echo.


REM Festlegen der gesuchten Variablen
echo set var1=%%1>Hole.bat

REM Holen derselben
call ZW.bat

echo.
PAUSE

:LEER1


REM PRFUNG: REM vor SET entfernen
REM set

PAUSE


echo.
echo Erkannte Variablen:

echo var1: '%var1%'


echo.
choice /c:jn OK? Ja\Nein
if errorlevel 2 goto ENDE
echo.
echo.

REM PAUSE

echo. Ausfuehrung
echo.
echo Passwort wird codiert und
echo in Passwort.txt abgelegt
echo.
echo      Name: %var1%
echo.
echo DAS PASSWORT MERKEN!
echo Es wird nicht registriert.
echo Auch eine Nulleingabe wird verarbeitet.
echo.
PAUSE

htpasswd -c Passwort.txt %var1%

echo.
PAUSE

REM ABSCHLUSS
echo.

:ENDE

echo:
echo Ende
echo.

REM Beseitigt Zwischenergebnisse:

del Name.txt
del Inhalt2.txt
del Hole.bat
del ZW.bat


REM AUSGABE

echo Ausgabe in Passwort.txt:
echo.

type Passwort.txt

echo.

PAUSE
echo Schliesse in 10 Sekunden
delay 10
CLS








Hinrichs 2009
