\documentclass[a4paper,12pt]{report}
\usepackage {german, color} 
\begin{document}
\setlength{\textheight}{23cm}
\setlength{\headheight}{0mm}
\setlength{\topmargin}{0mm}
\setlength{\textwidth}{16cm}

\begin{center}

\bf \Huge Batch-Dateien \\[5cm]\rm
\large 
Referat von Artur Neumann und  Oliver Scholle\\
\normalsize
beendet am 28.10.1999
\end {center}
\tableofcontents


\normalsize
\chapter {Allgemeines}

Das Wort Batch wird im deutschen mit "'Stapel"' "ubersetzt. Daher werden diese
oft auch als  \bf Stapelverarbeitungsdateien \rm bezeichnet. Diese Bezeichnung
ist absolut logisch, denn es handelt sich bei Batch-Scripten um nichts anderes
als einen Stapel von Befehlen. Batch-Dateien k"onnen dem PC-Benutzer viel Zeit
ersparen, denn viele Befehle die man oft in immer gleicher Form und
Reihenfolge benutzt, werden einfach in einer solchen Datei zusammengefasst.
 
 


\chapter {Batch-Dateien unter DOS}
Stapelverarbeitungsdateien sind einfache ASCII-Code Dateien und ben"otigen
unter Dos keine komplizierte Programmiersprache. Jede Datei mit der Endung
\bf .BAT \rm wird vom Betriebssystem als eine Batch-Datei behandelt und vom
Komando-Interpreter abgearbeitet.\\
Unter MS-DOS hei"st dieser Komando-Interpreter COMMAND.COM (unter Windows NT
lautet die Datei CMD.COM). Die COMMAND.COM, IO.SYS und MSDOS.SYS sind die drei
n"otigen Dateien um ein DOS-Kompatibles Betriebssystem zu starten. Desweiteren
wird das Vorhandensein der Dateien CONFIG.SYS und AUTOEXEC.BAT "uberpr"uft.
Sind diese vorhanden, werden die in Ihnen aufgef"uhrten Befehle beim Start des
Computers (Booten) ausgef"uhrt.\\
MS-DOS unterscheidet grunds"atzlich zwischen
zwei Arten von Befehlen, die internen und die externen. Interne Befehle sind
in der COMMAND.COM verankert und externe Befehle sind als Dateien mit der
Endung \bf *.EXE, *.COM \rm oder \bf *.BAT  \rm in einem Verzeichniss
vorhanden. Wird ein solcher Befehl eingegeben, sucht MS-DOS die betreffende
Datei in der angegebenen Reihenfolge. Das wirft eine kleine Beschr"ankung der
Namensgebung einer Batch-Datei auf. Man sollte eine solche z.B. nicht
FORMAT.BAT nennen, denn die Datei FORMAT.COM (Formatierungs-Befehl unter DOS)
wird aufgrund der Endung zuerst gefunden und gestartet.\\[0.5cm]
Die wohl wichtigste Stapelverarbeitungsdatei unter DOS ist wohl die schon
genannte AUTOEXEC.BAT. Wie der Name schon sagt, ist dies eine Batch-Datei, die
automatisch ausgef"uhrt wird. Sie bietet dem DOS-User eine M"oglichkeit sein
Betriebssystem zu konfigurieren.
\\[0.5cm]
Ab der Version 6.0 von MS-DOS gibt es ein paar wichtige Neuerungen in Sachen
Batch-Befehle. Dies ist zum einen das Bootmen"u und zum anderen der Choice
Befehl. Diese beiden features erm"oglichen dem Benutzer erstmalig interaktiv
"uber Tastatureingaben mit einer Stapelverarbeitungsdatei zu kommunizieren.
 

\section {Beispiel: Choice-Befehl}
Der Choice-Befehl erm"oglicht es auf einen vorher definierten Tastendruck zu
warten. \\[0.5cm]
\noindent
\fbox{
\begin{minipage}[t]{5.5cm}
\sloppy echo Bitte w"ahlen Sie: \\
echo 1) WORD 5.0 \\
echo 2) DELUXE PAINT 2
\\
echo 3) TURBO-PASCAL 5.5 \\
echo Ihre Wahl (1, 2 oder 3) ? \\ 
choice /c:123
 if \\
errorlevel=3 goto tp55
\\
if errorlevel=2 goto dpaint \\
word.exe
\\
goto ende
\\
:tp55
 \\
tp.exe \\
goto ende \\
:dpaint
\\
dp.exe \\
:ende 
\end {minipage}}
\ %hier mu"s etwasstehen sondt sind die beiden minipages nicht nebeneinander
\begin{minipage}[t]{7cm}
\sloppy Der Befehl "'choice /c123"' bewirkt, da"s die 
Stapelverarbeitung unterbrochen  wird und auf 
eine Eingabe vom Benutzer gewartet wird. Diese 
kann in diesen Fall 1, 2 oder 3 sein. Mit dem 
Parameter "'/cAB"' w"urde auf
Taste A oder B gewartet.
 
 Der "'errorlevel"' Befehl gibt zur"uck, welche
Taste aus der gegebenen Auswahl gedr"uckt wurde. Bei Taste A w"are dieser Wert
1 und bei Taste B w"are er 2.
 
\end{minipage} 
\section {Bootmenu}
Das Bootmen"u bietet dem Benutzer die M"oglichkeit zwischen verschiedenen Start-Konfigurationen des Rechners 
zu w"ahlen.
\\

\large \noindent
\\[0.5cm]
CONFIG.SYS:
\normalsize
\\
\fbox{ \begin{minipage}[t]{6cm}
\sloppy [menu] \\
menuitem=no\underline{ }netz, Stand-alone\\
menuitem=novell,Novell-Netz
\\[0.2cm]

[common]
\\
device=himem.sys
\\
device=emm386.exe noems
\\
dos=high,umb
\\[0.2cm]

[no\underline{ }netz]
\\
lastdrive=d
\\[0.2cm]

[novell]
\\
lastdrive=p
\end {minipage}} 
\
\begin{minipage}[t]{7cm}
\sloppy Der Blockname \bf "'menu"' \rm zeigt MS-DOS, da"s hier der Inhalt des
Bootmen"us vereinbart wird. Die beiden \bf "'menuitem"' \rm Befehle bedeuten,
da"s es einen Block-namen no\underline{ }netz und novell gibt. Diese sollen im
Auswahlmen"u auf dem Bildschirm durch die Texte Stand-alone und Novell-Netz
vertreten werden (siehe Bildschirmausgabe).
 Der Block \bf "'common"' \rm wird
immer ausgef"uhrt, doch die Befehle in einem anderen Block nur, wenn dieser im
Bootmen"u gew"ahlt wurde.
 
 \end {minipage}

\pagebreak
\large \noindent 
AUTOEXEC.BAT:
\normalsize \\
\fbox {\begin{minipage}[t]{7cm}
\sloppy goto config\\[0.2cm]

:no\underline{ }netz\\
mouse.com\\
goto ende
\\[0.2cm]

:novell
\\
mouse.com
\\
lh ipx.com
\\
lh netx.com
\\[0.2cm]

:ende
\end {minipage}}
\
\begin{minipage}[t]{7cm}
\sloppy Bei der Auswahl im Bootmen"u legt DOS den gew"ahlten Blocknamen in eine
Umgebungsvariable "'config"'.  Mit der goto Anweisung springt DOS in diesem
Beispiel entweder zu "'no\underline{ }netz"' oder zu "'novell"'. So wird
vermieden, da"s unerw"unschte Treiber, in diesem Fall die Netzwerktreiber nicht
geladen werden. Sie w"urden nur unn"otig Zeit und Speicher in Anspruch nehmen.
Und um letzteren mu"s(te) man unter DOS immer hart k"ampfen.
 
 
 
\end {minipage}

\large \noindent
\\[0.2cm]
Bildschirmausgabe: \\
\normalsize \\
\fbox{\parbox{8cm}{
\underline{\underline{Startmen"u f"ur MS-DOS 6}}
\\[0.2cm]
                     
\colorbox[gray]{0.8} {1. Stand-alone} \\
	2.Novell-Netz	
\\

W"ahlen Sie die gew"unschte Option: 1 
}}

\chapter{Batch-Dateien unter UNIX}
\section {UNIX Shells}

Die Shell ist unter UNIX die wichtigste Benutzerschnittstelle. Sie dient im wesentlichen 
zum ausf"uhren von Befehlen. Da der gr"o"ste Teil der Befehle unter UNIX
eigene Programme sind und die Shell selber nur sehr wenige kennt, besch"aftigt
sie sich haupts"achlich damit die Programme zu starten. \\
Die Shell verf"ugt "uber drei Komunikationskan"ale: STDIN, der Standard
Eingabekanal. Dieser Kanal wird benutzt um z.B. Tastatureingaben an ein
Programm weiterzuleiten. STDOU, der Standard Ausgabekanal. Dieser wird benutzt
um z.B. Ausgaben auf dem Bildschirm anzuzeigen. Als letztes gibt es STDERR,
den Standard Fehlerkanal. Dieser wird benutzt um Fehler jeglicher Art
weiterzuleiten. Sowohl zum Benutzer, zu Programmen oder auch zum
Betriebssystem. Die Shell kann aber auch diese drei Kan"ale umleiten man kann
z.B. die Ausgaben eines Programms wie "'ls"' (Inhalt eines Verzeichnisses
anzeigen) in eine Datei, auf eine andere Konsole oder sogar auf einen anderen
Teilnehmer im Netzwerk umleiten. Die ‚besseren' Shells sind aber auch
eigenst"andige Programmiersprachen. Sie kennen Variablen und die meisten
Kontrollstrukturen einer h"oheren Programmiersprache. \\
Es gibt viele verschiedene Shells, aber nur die folgenden beiden
Hauptentwicklungslinien von Shells: \\
\begin{enumerate}
\item Bourne-Shell-Linie, zu der u.a. die
Bourne-Shell (sh) selbst, die Korn-Shell (ksh) und die Bourne-Again-Shell
(bash) geh"oren. 
 
\item C-Shell-Linie, zu der u.a. die C-Shell (csh) selbst und
die tcsh-Shell geh"oren. 
 
 
\end {enumerate} 
Die Bourne-Shell ist die "alteste Shell und die meisten
existierenden Scripts (Kommandoprozeduren) sind wohl immer noch f"ur die
Bourne-Shell geschriebenen. \\[0.2cm]
Die Korn-Shell ist weitgehend kompatibel zur
Bourne-Shell, enth"alt aber einige Erweiterungen mit Funktionalit"aten, die
bei der Bourne-Shell nicht vorhanden sind. Diese Ausage gilt auch f"ur die
Bourne-Again-Shell. Jedoch sind die Erweiterungen von Bourne-Again-Shell und
Korn-Shell teilweise zueinander inkompatibel.\\
Die C-Shell gab es bereits vor der Korn-Shell. Sie bietet einiges mehr an
Funktionalit"at als die Bourne-Shell und wurde deshalb damals von vielen Usern
gerne benutzt. Die C-Shell hat zwar auch einige Gemeinsamkeiten mit der
Bourne-Shell, Aber bei sehr vielen Dingen ist sie inkompatibel zur
Bourne-Shell.\\
Bourne-; Korn- und C-Shell sind im normalen Lieferungumfang
eines UNIX System enthalten. \\[1cm]

\section {Das Shellscript}
Unterschiede und Parallelen zu DOS-Batchdateien:
\\[10mm]
\bf Unterschiede: \rm \\
Die Shellscripte sind viel m"achtiger als ihre Kollegen in der MS-DOS-Welt.
Sie sind eigentlich komplette Programmiersprachen. Sie kennen Variablen,
if-Verzweigungen, Fu"s-, und Kopfgesteuerte Schleifen usw. \\[10mm]
\noindent
\bf Parallelen:
\rm 
\begin {enumerate} 
\item Die Erstellung.
 Scripte werden als ASCII-Datei
gespeichert.
\item Die Behandlung der Syntaxfehler.\\
Das Programm wird nicht erst komplett nach Fehlern untersucht, diese werden
bei der Ausf"uhrung entdeckt und gemeldet. Das Programmablauf wird in der
n"achsten Zeile fortgesetzt.
 
 
 
\end {enumerate}
\noindent
\bf Erstellung:\rm \\
Shellscripte sind Dateien, in der vorgefertigte Kommandos f"ur einen
Kommandointerpreter (eine Shell) abgelegt sind. Um ein Shellscript zu
erstellen, gibt man mit einem Editor eine Befehlsfolge ein und speichert diese
in einer Datei ab.\\
\begin{itemize}
\item Befehle sind die eigenen Kommandos der Shell es
k"onnen aber auch externe Programme benutzt werden.
\item Befehle k"onnen sich "uber mehrere Zeilen erstrecken. Man erreicht
\bf Fortsetzungszeilen \rm indem das Ende der Zeile, die fortgesetzt werden
soll, vor der Shell verborgen wird: als letztes Zeichen in der Zeile (vor dem
Zeilenwechsel) tr"agt man das Zeichen \begin {math} \backslash \end {math} ein.
\item Mehrere Befehle in einer Zeile werden durch das Zeichen ; getrennt.
\item Das Zeichen \# leitet einen Kommentar ein, der sich bis zum Zeilenende
erstreckt. 
\item Um Verwechslungen zu vermeiden, wird in der ersten Zeile von
Bourne-Shell Scripten durch einen speziellen Kommentar vermerkt, da"s der
folgende Inhalt durch die Bourne-Shell /bin/sh abzuarbeiten ist. \\[0.5cm]
\end {itemize}

\large
Beispiel: \\
\normalsize
\fbox{\begin{minipage}[t]{9cm}
\begin {tabbing}
\# !/bin/sh
\\
test -e \$1 \begin {math} \| \end {math} echo "'Die Datei exestiert nicht"'
\\ test -e \$1 \begin {math} \| \end {math}  1  exit
 \\[1cm]
echo "'wollen Sie wirklich die Datei:"' \$1 wirklich  \begin {math} \backslash
\end {math} \\
l"oschen?"'
\\ 
echo "'j"' oder "'n"'
 \\
while ["'\$antwort"'!="'j"'] \&\& ["'\$antwort"'!="'n"'] 
\\
do \\[0.5cm]
 \hspace*{0.5cm}\= read antwort
\\
\> if test \$antwort = "'j"' \\
\> \hspace*{0.5cm}\= then rm\$ 1 \\
\> elif test \$antwort = "'n"'
\\
\> \> then echo "'Dann eben nicht"'
\\[0.5cm]
else  echo   "'Ich hab gesagt 'j' oder 'n'!"'
\\[1cm]
fi
\\
done
\end {tabbing}
\end {minipage}
}
\
\begin{minipage}[t]{5cm}
\vspace{0.19cm}
"Uberpr"ufen ob die Datei exestiert
wenn nicht Fehlermeldung  ausgeben und das Programm beenden\\
Bildschirmausgabe\\
\em Fortsetzungszeile \rm \\[0.45cm]
Schleife so lange durchlaufen bis "'j"' oder "'n"'
gedr"uckt wurde \\
Antwort einlesen \\
wenn Antwort=j \\ 
dann l"oschen \\
wenn Antwort=n \\
dann Text ausgeben und Programm beenden \\
wenn irgendetwas anderes gedr"uckt wurde Fehlermeldung anzeigen \\
Ende "'if"'-Anweisung \\
Ende der Schleife \\
\end {minipage}
\noindent
Mit dem Befehl \bf "'chmod +x script"' \rm wird die Datei \em script \rm als
ausf"uhrbar (e\bf x\rm ecutable) markiert.  Der Aufruf \bf "'script"' \rm ruft
das in der Datei \em script \rm abgelegte Shellscript zur Ausf"uhrung auf,
falls sich das aktuelle Verzeichnis (working directory `pwd`) im Suchpfad
befindet. Alternativ kann das Script auch mit \bf "'./script"' \rm oder \bf
"'/bin/sh script"' \rm gestartet werden
 
 
 


\chapter{Batch-Dateien unter Windows}
\section {Windows Scripting Host (WSH)}
Unter Windows gab es zun"achst keinen Ersatz f"ur die DOS Batchdateien. Man konnte zwar 
weiterhin diese benutzen aber das ist h"ochst umst"andlich. Man hat nur sehr
begrenzte M"oglichkeiten in der Steuerung von Windows und erst recht keine GUI
\em (graphical User Interface)\rm . Microsoft hat nach einiger Zeit den Windows
Scripting Host (WSH) herausgebracht.  Der WSH ist eine komplette
Programiersprache die als programierbare Schnittstelle zum System dient. Der
Scripting Host versteht JScript und VBScript. Die JScripte haben den Vorteil
das sie im JavaScript-f"ahigem Browser laufen, der VBScript ist mit
Visual-Basic verwandt und deshalb viel leichter zu erlernen. \\
Der Scripting Host ist im Win98-Packet enthalten, f"ur Win95 und NT kann man
ihn kostenlos aus den Internet herunterladen.\\
Da Microsoft seinen Makrorecorder nach der Version 3.11 in Jahre 1995 nicht
mehr weiterentwickelt hat, kann man ohne weitere Tools von anderen Anbietern
nicht wie z.B. unter MacOS ein Script einfach aufzeichen. Man mu"s den
Quellcode in einem Editor eingeben und die Datei im ASCII-Format abspeichern.
Die JScripte m"ussen \bf '.js' \rm und die VBScripte \bf‚'.vbs' \rm als
Dateiendung erhalten. Wenn der Scripting Host installiert ist f"uhrt er die
Scripte bei Doppelklick auf die Datei aus.\\[0.5cm]
Einsatzf"alle f"ur den WSH
\begin{itemize}
\item Automatisierung von Jobs der Benutzer
\item Anwendbar in Logon/Logoff/Setup- Scripts 
\item Durchf"uhrung von Administrativen Aktionen (z.B. Benutzerverwaltung) 
\item Lesen und Beschreiben der Registry
\item Abfrage des Benutzers m"oglich
 
\end{itemize}
Der begrenzte Befehlssatz des WSH l"a"st sich leicht erweitern indem man auf
Funktionen und Objekte von anderen vorhandenen Programmen zugreift. So kann
man den Scripten z.B. Befehle zur Steuerung des Dateisystems "'beibringen"'.
Durch den Zugriff auf Funktionen und Objekte anderer Programme lassen sich
diese auch "'fernsteuern"'. Man kann z.B. Word starten, das Anwendungsfenster
in der Gr"o"se manipulieren, ein Dokument erzeugen, etwas Text im Dokument
einf"ugen und das Ganze drucken. Voraussetzung daf"ur ist nat"urlich das bei
der Software die man fernsteuern will die n"otigen Schnittstellen vorhanden
sind.\\
 Das alles funktioniert dadurch das alle unter Windows installierten
Automatisierungsobjekte (COM-Objekte, ActiveX-Komponenten, DLL-Bibliotheken
etc.) ihre Funktionen zur Nutzung durch andere Programme bereitstellen
k"onnen. Aus einem VBScript- oder JScript-Programm l"a"st sich dann auf diese
Funktionen zugreifen. Um diese beiden M"oglichkeiten zu benutzen mu"s man
nat"urlich wissen, welche Funktionen das Programm liefert und freigibt, und
welche Schnittstellen es nach au"sen aufweist. Diese Informationen erf"ahrt
man leider nur sehr selten aus den Dokumentationen der jeweiligen Programme.
Daf"ur gibt es gl"ucklicherweise zus"atzliche Tools (z.B. VBA Companion) die
alle im System vorhandenen Automatisierungsobjekte mit deren Befehlen und
Eigenschaften auflisten.
\\[0.5cm]

\noindent
\large Beispiel f"ur ein VBScript:\normalsize \\
\fbox{\parbox{15cm}{
\begin{tabbing}
01 \hspace*{0.5cm}\= frage="'Bitte geben Sie ein Datum ein, und ich verrate
	Ihnen den Wochentag!"'
\\
02 \> datum=InputBox(frage)
\\
03 \> if  isDate(datum) then
\\
03 \> \hspace*{0.5cm}\=antwort  = "'Der"' \& datum \&  "'f"allt auf einen"'\\
04 \> \> antwort = antwort + WeekdayName(Weekday(datum)) \\
05 \> \> MsgBox antwort, vbInformation
\\
06 \> else
\\
08 \> \> antwort = datum \& "' ist kein g"ultiges Datum!"'
\\
09 \> sBox antwort, vbExlamation
\\
10 \> end if
\end{tabbing}}
}
\\
\em (Die Zeilenzahlen dienen nur zur Orientierung, und d"urfen nicht
eingegeben werden!)\rm \\ 
\begin{enumerate}
\item Die Variable \em frage \rm wird mit dem Text zwischen den
Anf"uhrungszeichen initialisiert
\item Ein Eingabefenster wird gezeigt. Das was man in das
Eingabefeld eingibt wird der Variablen \em datum \rm zugewiesen
\item wenn \em datum \rm ein g"ultiges Datum ist dann
\item Variablen \em antwort \rm den Text zwischen den Anf"uhrungszeichen
und den Inhalt der Variablen \em datum \rm zuweisen 
\item Die Funktion \em Weekday() \rm aufrufen. Diese Funktion liefert den
Wochentag des angegebenen Datums in Zahlen zwischen 1 f"ur Sonntag und 7
Samstag zur"uck. Dieser Wert wird direkt an die Funktion \em
WeekdayName() \em "ubergeben, diese wandelt den Wert in Wochentage um und
gibt das Wort dann zur"uck. Dieses Wort wird dann an  den Inhalt von \em
antwort \rm angeh"angt.
\item zeigt ein Nachrichtenfenster mit dem Inhalt von der Variablen \em
antwort, vbInformation \rm sagt dass ausserdem in diesem
Nachrichtenfenster das Info-Symbol erscheinen soll 
\item wenn die Variable \em datum \rm kein g"ultiges Datum enth"alt
\item der Variablen \em antwort \rm den Inhalt von \em datum \rm zuweisen und
den Text in den Anf"uhrungszeichen anh"angen 
\item zeigt ein Nachrichtenfenster mit dem Inhalt von der Variablen \em
antwort, vbExlamation \rm sagt dass ausserden in diesen
Nachrichtenfenster ein Ausrufezeichen erscheinen soll.
\end {enumerate}
\chapter {Vorgehensweise} 
Nach der Vereinbarung des Themas "'Batch-Dateien"'
begannen wir mit der Materialsuche in privaten und schulischen Best"anden und
im Internet (siehe Quellenangaben). Da dieses Thema nicht allzu umfangreich
ist, haben wir den Bezug zu drei verschiedenen Betriebssystemen hergestellt.
Daher wird teilweise auch sehr genau auf eben diese eingegangen. 
 Ein
Gro"steil des Referates wurde w"ahrend der Schulzeit verfa"st, aber Teile
davon enstanden auch an unseren privaten Rechnern.
\\[0.2cm]
Sonstige Arbeitsteilung:\\[0.5cm]
\bf - Oliver Scholle
\rm 
\begin{tabbing}
Text : \hspace*{0.5cm}\=1.Allgemeines \\
\>2.Batch-Dateien unter MS-DOS
\\
\>5.Vorgehensweise
\\
Textformatierung (in MS-Word97)\\[0.5cm]

\bf - Artur Neumann
\rm \\

Text : \> 3.Batch-Dateien unter UNIX
\\
\>	 4.Batch-Dateien unter Windows
\\
Umformartierung nach \LaTeX\
\end{tabbing}
 
  	
 

\chapter
{Quellenangaben}
\begin{itemize}
\item Mircosoft MS-DOS Handbuch (5.0)
\item DOS 8/1993 "'ANWENDUNG, Tips zu MS-DOS 6.0"'
\item LINUX Usergroup OWL
 
\item c't 10/1999 "'Windows in Griff"'
\item c't 12/1999 "'LINUX Transparent"'
\item http://www.addon.de
 
\item Computermarkt: \\
URL: http://www.computermarkt.ch/
\item Tu-Berlin (Wontan Handbuch): \\
URL: http://www.tu-berlin.de:8888/zrz/information/paper/handbuch/index.html
 
\item Uni Freiburg: \\
URL: http://www.ukl.uni-freiburg.de/zentral/krz/abteil\_ 2/unixkurs/shintro.htm
 \end{itemize}
\end {document}
