Axels Homepage


 ≡ Links ≡ 
Text-Editoren:



Erweiterungen für Notepad++:
batch.xml einfach (1 kB)
batch.xml erweitert (2 kB)

Hinweis zu den Links
Problem mit einem Link?
 
Sie sind hier: » PC + Co. » BATch-Ecke » Vorlage
Tipp
In der Quicksearch-Box rechts können Sie den Namen eines Windows-Kommandos oder Kommandozeilentools eingeben und kommen so schnell zu dessen Beschreibung.

BATch-Dateien - leeres Template

Einleitung

Zumeist sind BAT-Dateien recht klein und damit überschaubar. Wenn man doch auf die Idee kommt, etwas mehr hineinzupacken und es vielleicht irgendwann doch unübersichtlich wird, ärgert man sich: Wieso habe ich nicht von Anfang an Strukur in das Ganze gebracht!?

Ich habe mir aus diesem Grunde angewöhnt, immer eine Vorlage zu verwenden, die in mehrere Abschnitte unterteilt ist:

  • Header
    In Kommentarzeilen werden Name des Skriptes, eine Beschreibung und eine History (Datum + Beschreibung der Änderung) abgelegt.

  • CONFIG
    Hier initialisiere ich die gebrauchten Variablen. Hier werden z.B. Pfade und Dateinamen, die ich später brauche, in Umgebungsvariablen abgelegt.
    Hier darf der User noch Anpassungen vornehmen.

  • MAIN
    In dieser Sektion ist das eigentliche Skript.
    Dieser Teil ist so geschrieben, dass er keine "hardcodierten" Elemente enthält, sondern immer funktioniert und mit den Variablen aus dem CONFIG-Abschnitt auskommt.

  • END
    Hier werden z.B. temporäre Dateien gelöscht und/ oder auf einen Tastendruck zum Beenden gewartet.

einfache Variante

Es kann z.B. so aussehen:

@echo off
rem ======================================================================
::
::  [2do: insert the script name here]
::  Axel Hahn - http://www.axel-hahn.de/
::
rem ----------------------------------------------------------------------
::  History
::  V1.0 - 2003-08-13  initial version
rem ======================================================================
 
rem ----------------------------------------------------------------------
::  CONFIG
rem ----------------------------------------------------------------------
 
        set sTitle=[2do: insert the script name here]
        set LINE=-------------------------------------------------------------------
 
 
rem ----------------------------------------------------------------------
::  MAIN
rem ----------------------------------------------------------------------
        echo %LINE%
        echo.
        echo %sTitle%
        echo.
        echo %LINE%
        echo.
 
        echo 2do: insert your code here..
 
        goto END
 
 
rem ----------------------------------------------------------------------
::  the end of all
rem ----------------------------------------------------------------------
        :END
        echo %LINE%
        echo %0 was terminated.
        echo press any key...
        pause >nul
 
 
rem ======================================================================
::  EOF
rem ======================================================================
BAT-Template

Befehle: echo goto pause set rem

Seitenanfang


Erweiterungen

aktuelles Skriptverzeichnis in eine Variable holen

Gern setze ich eine Variable scriptdir mit dem aktuellen Verzeichnis, in dem sich das Skript befindet. Meist lege ich im selben Verzeichnis oder in einen Unterverzeichnis noch andere Dateien an (Konfigurationen, Binaries). So kann ich diese dann in leserlicher Form ansprechen:
set scriptdir=%~dp0
Die Variable scriptdir enthält dann den aktuellen Pfad inkl. abschliessenden Backslash. Dies funktioniert mit auch UNC-Pfaden (das Kürzel %~d0 für das Laufwerk ist halt nur leer).

mehrfache Konfigurations-Sets

Wenn man ein Skript daheim auf dem Privatrechner laufen lässt, ist das Bearbeiten des Skripts und das Anpassen der Variablen kein Problem. Oft ist es so, dass man aber auch die CONFIG-Sektion variabel halten muss, z.B.
  • Im Netzwerk-Einsatz - bei manchen Servern braucht man eine eine andere Konfiguration
  • oder bei Tests in eigenen Umgebung und späteren Einsatz bei einem Kunden
Nun, prinzipiell ist es eh besser, wenn man Logik des Codes von der Konfiguration trennen kann.

Die Lösung des Problems besteht im call-Aufruf einer weiteren Datei (bei sonstigen Skriptsprachen entspricht das einer Include-Anweisung). Man kann pro Server/ Kundenumgebung eine andere Konfigurationsdatei installieren oder auf Umgebungsvariablen zurückgreifen, und rechnerspezifisch oder benutzerspezifisch einen Dateinamen ansprechen:

%USERNAME% - enthält aktuellen Benutzer, unter dem das Skript ausgeführt wird
%COMPUTERNAME% - Rechnername

set scriptdir=%~dp0

rem --- eine Default-Variable setzen
set defaultdir=C:\irgendwo

rem --- Festlegen des Namens der Konfigurationsdatei
set cfgfile=%scriptdir%config_%COMPUTERNAME%.bat

rem --- Mit Call die Konfiguration laden
call "%cfgfile%" 2>nul || (
	echo.
	echo ERROR - the config file
	echo %cfgfile%
	echo was not found. Exit.
	pause
	exit
)
echo %defaultdir%
BAT-Template - Laden der rechnerspezifischen Konfiguration

Befehle: call echo goto set rem

Die Konfiguration ist dann eine BAT, die einfach mit set die notwendigen Variablen setzt:

rem --- Konfiguration für Rechner server1.example.com
set defaultdir=D:\irgendwoanders
BAT-Template - die Konfiguration selbst


Hilfe und Syntax ausgeben

Das gehört in die Rubrik erweitertes Skripting (getestet mit XP).
Man kann in den Header etwas Dokumentation packen. Wenn man diese Dokumentation so schreibt, dass man sie parsen kann, kann man diese Ausgabe auch noch für das Skript selbst verwerten.

Mal ein Beispiel: Hinter dem Kommentar mit :: ab Zeilenanfang schreibe ich mein Keyword "HELP" und Doppelpunkt. Dahinter folgt der eigentliche Hilfetext.

@echo off
rem ======================================================================
::
::	MEIN SKRIPT
::
rem ----------------------------------------------------------------------
::
::	HELP:MEIN SKRIPT - V1.0
::	HELP:Dieses Skript macht irgendwas ganz Tolles.
::
::	SYNTAX:SYNTAX:
::	SYNTAX:call skriptname [variable1] [variable2]
::	SYNTAX:  [variable1] - ist wichtig
::	SYNTAX:  [variable2] - die auch
::
BAT-Template - Hilfe und Syntax ausgeben

Befehle: echo rem

Diese Hilfe kann ich ausgeben, indem ich im eigenen Skript (Variable %0) mit dem regulären Ausdruck "^::.*HELP:" danach suche.

	set var1=%1
	set var2=%2

	if "%var1%"=="" goto help
	if "%var2%"=="" goto showSyntax

	rem ... main code is here ...
	goto end


	:help
	echo.
	for /F "tokens=2* delims=:" %%a in ('findstr "^::.*HELP:" "%0"') do echo %%a

	:showSyntax
	echo.
	for /F "tokens=2* delims=:" %%a in ('findstr "^::.*SYNTAX:" "%0"') do echo.%%a
	echo.
	goto end


	:end
BAT-Template - Hilfe und Syntax ausgeben

Befehle: echo findstr for goto set

Seitenanfang

 
©2010 by Axel Hahn - powered by
Valid HTML 4.01!