Auswahlmenü in einer Batch-Datei


Als Programmierer ist man faul, deswegen ist man ja Programmierer geworden, um Programme zu schreiben, damit einem die Kiste Arbeit abnimmt. Natürlich will man es auch bei regelmäßig widerkehrenden Aufgaben so einfach wie möglich haben. Eine regelmäßig widerkehrede Aufgabe bei mir ist zum Beispiel das Sichern von meinen Daten. Dazu habe ich eine zweite interne Festplatte auf der ich meine Dateien sichere. Die Dateien werden gepackt und in dem entsprechendem Verzeichnis auf der Backupfestplatte abgelegt. Da es natürlcih recht mühsam ist dieses jedesmal von Hand zu machen, habe ich mir Batch-Dateien erstellt mit den entsprechenden Kommandozeilenaufrufen meines Pack-Programms. Das sieht dann ungefähr so aus:

call 7z -t7z -mx=1 -ms=off -slp a "i:\Programmierung\dev_%date%.7z" "e:\" -x!"e:\RECYCLER"
    -x!"e:\System Volume Information" -x!"e:\Iconsammlung"

Alle Ordner und darin enthaltene Dateien der Partition e:\ werden gepackt und in einem Archiv mit dem Dateinamen dev_aktuelles_Datum im Ordner i:\Programmierung gespeichert.

Jetzt hatte ich davon mehrere Batch-Dateien. Eine für die eigenen Dateien, eine für Programmierung, eine für meine Homepage usw. Das war mir dann aber etwas zu unübersichtlich in der Schnellstartleiste meherer Verknüpfungen zu den Batch-Dateien zu haben, um sie schnell aufrufen zu können. Und alles in einer Batch-Datei wäre auch nicht schön gewesen, da ich dann imme rnur ein komplettes backup hätte machen können, was aber zum einem nicht immer nowendig ist und zum anderem auch entsprechend lange dauert. Also habe ich mir eine Batch-Datei mit einem Auswahlmenü erstellt.

Als erstes wird das Menü erstellt:

@echo off
echo             Backup-Skript
echo             =============
echo.
echo   [1] eigene Dateien
echo   [2] Homepage
echo   [3] Programmierung
echo   [4] Ausbildung FIAE (synchronisieren)
echo   [5] Fotos (synchronisieren)
echo   [6] Videos (synchronisieren)
echo   [7] USB-Stick synchronisieren
echo.

Der Befehl echo gibt die nachfolgende Zeichenfolge in der Konsole aus. Dabei wird die Befehlszeile immer erst noch mal ausgegeben. Um dies zu unterdrücken kann man das @-Zeichen voranstellen. Damit man dies aber nicht in jeder Zeile tun muss, kann man dies Verhalten mit dem Befehl echo off ganz abstellen. Eine Leerzeile erzeugt man, in dem man dem Befehl echo direkt einen Punkt folgen lässt.

Als nächstes muss die Benutzereingabe verarbeitet werden. dazu wird der Befehl set genutzt. Mit dem befehl kann man unteranderem die Umgebungsvariablen setzen und sich anzeigen lassen. Mit der Option /P kann man eine Variable definieren und ihr dann eine Benutzereingabe zuweisen:

set asw=0
set /p asw="Bitte Auswahl eingeben: "

Diese wird dann in den folgenden Zeilen ausgewertet. Mit dem Befehl goto wird dann zu der zugehörigen Sprungmarke gesprungen. Sprungmarken werden durch einen Doppelpunkt und einer Zeihenfolge definiert, zum Beispiel: :HP.

if %asw%==1 goto FILES
if %asw%==2 goto HP
if %asw%==3 goto DEV
if %asw%==4 goto FIAE
if %asw%==5 goto FOTO
if %asw%==6 goto VIDEO
if %asw%==7 goto USB
goto END

Das abschliessende goto END sorgt dafür, wenn der Benutzer keine gültige Eingabe gemacht hat, dass das Skript beendet wird.

:HP
echo Homepage sichern
call 7z -t7z -mx=1 -ms=off -r a "i:\Homepage\homepage_%date%.7z"
     "D:\04 Homepage\michael-puff.de\*.*" -x!"Privat"
goto END

:END
pause

Wichtig ist, dass eine Sprungmarke am Ende des Skriptes definiert wird, zu der gesprungen werden kann, wenn die Befehle eines goto-Zweiges abgearbeitet wurden. Macht man dies nicht so, würden auch alle folgenden goto-Zweige (Menüpunkte) mit abgearbeitet werden.

Insgesamt sieht der Code dann so aus (Ich habe nicht alle goto-Zweige ausgeführt.):

@echo off
echo             Backup-Skript
echo             =============
echo.
echo   [1] eigene Dateien
echo   [2] Homepage
echo   [3] Programmierung
echo   [4] Ausbildung FIAE (synchronisieren)
echo   [5] Fotos (synchronisieren)
echo   [6] Videos (synchronisieren)
echo   [7] USB-Stick synchronisieren
echo.

set asw=0
set /p asw="Bitte Auswahl eingeben: "

if %asw%==1 goto FILES
if %asw%==2 goto HP
if %asw%==3 goto DEV
if %asw%==4 goto FIAE
if %asw%==5 goto FOTO
if %asw%==6 goto VIDEO
if %asw%==7 goto USB
goto END

:FILES
echo eigene Dateien sichern
goto END

:HP
echo Homepage sichern
call 7z -t7z -mx=1 -ms=off -r a "i:\Homepage\homepage_%date%.7z"
      "D:\04 Homepage\michael-puff.de\*.*" -x!"Privat"
goto END

:END
pause

Damit ist es nun kein großer Aufwand mehr seine Dateien zu sichern, was man auch regelmäßig tun sollte.


2010-12-29T23:44:37 +0100, mail+homepage[at]michael-puff.de