WatchDir - Überwachung von Verzeichnissen (Win Nt/2000/XP)


Synopsis: watchdir directory command [args]

WatchDir überwacht ein Verzeichnis directory. Nach dem ersten Start und anschließend bei Änderungen im Verzeichnis wird das Kommando (oder die Batch-Datei) command mit directory und optionalen weiteren args als Parameter aufgerufen. Kann u.a. dazu verwendet werden, Dateien, die in ein bestimmtes Verzeichnis kopiert werden, mit weiteren Programmen in ein anderes Format umzuwandeln. WatchDir kann z.B. mit 'Geplante Tasks' bei Systemstart als Job ausgeführt werden. Einmal gestartet, läuft das Programm als eigener Prozess ohne Fenster in einer Endlosschleife. Der Prozess watchdir.exe kann z.B. über den Windows Task-Manager beendet werden. Die Benutzung von WatchDir ist auf eigene Gefahr. Falls Sie einen größeren Konfigurationsaufwand haben, lohnt wahrscheinlich die Anschaffung eines Programms wie [watchdirectory.net] oder schauen Sie sich das Freeware-Tool [FileNotify] an.

Mit unter ist es wichtig, mit Aktionen zu warten, bis sich die Datei, die behandelt werden soll, nicht mehr ändert. Das Kommando waitclose kann hierzu in einer auszuführenden Batch verwendet werden. Es wird in einer Endlosschleife zunächst versucht schreibend und lesend auf die Datei zuzgreifen, falls das gelingt wird zusätzlich überprüft ob sich die Dateigröße geändert hat. Damit nicht ständig überprüft wird, wird vor dem nächsten Versuch eine beim Aufruf anzugebende Zeitspanne gewartet. Der optionale Parameter -e gibt an ob das Programm sich sofort beenden soll, falls die Datei nicht gefunden wird.

Synopsis: waitclose millisec file [-e]

Downloads

Anwendungsbeispiel

Das Anwendungsbeispiel soll nur die Funktionsweise erläutern, in der Praxis verwenden Sie zur PDF-Ausgabe besser ein Programm wie PDFCreator.

Die Programme können z.B. dazu verwendet werden, eine Umwandlung von PostScript-Dateien in PDF-Dateien anzustoßen. Diese Aufgabe kann unter Windows XP wie folgt durchgeführt werden:

Legen Sie zunächst ein paar Verzeichnisse an. In diesem Fall das Basisverzeichnis C:\pdf und die Unterverzeichnisse C:\pdf\in für die eingehenden PostScript-Dateien, C:\pdf\out für die Ausgabe und C:\pdf\bin für die benötigten Programme. In das Programm-Verzeichnis kopieren Sie anschließend die GhostScript Verzeichnisse und die Fonts. Z.B. das Verzeichnis fonts und gs8.14 aus der GhostScript 1.4 Distribution. Sie können die Verzeichnisse auch woanders hin kopieren, müssen dann aber die Pfade entsprechend anpassen. Kopieren die Programme watchdir.exe und waitclose.exe ebenfalls nach C:\pdf\bin. Sie müssen nun eine Batch-Datei schreiben, die die Konvertierung aufruft. Erzeugen Sie dazu im Programm-Verzeichnis eine Datei convertpdf.bat:

@echo off

setlocal
REM PostScript Datei in Verzeichnis nach PDF konvertieren und loeschen
REM Parameter: Eingabepfad Basispfad
if "%~1"=="" goto ENDE
if "%~2"=="" goto ENDE

set inpath=%~1

REM Basisverzeichnis setzen
set basepath=%~2

if NOT EXIST "%BASEPATH%" goto ENDE

set outpath=%BASEPATH%\out
set progpath=%BASEPATH%\bin

if NOT EXIST "%PROGPATH%" goto ENDE

if NOT EXIST "%OUTPATH%" mkdir "%OUTPATH%"
if NOT EXIST "%OUTPATH%" goto ENDE

SET GSPATH=%PROGPATH%\gs8.14
SET GSFONTS=%PROGPATH%\fonts

if NOT EXIST "%GSPATH%" goto ENDE
if NOT EXIST "%GSFONTS%" goto ENDE

for %%i in ("%inpath%\*.*") do (
  %progpath%\waitclose 2000 "%%i" -e
  "%GSPATH%\bin\gswin32c.exe" "-I%GSPATH%\lib;%GSFONTS%" -sOutputFile="%outpath%\%%~ni.pdf" -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -r600 %PARAMS% "%%i" > "%outpath%\%%~ni.log"
  copy "%%i" "%OUTPATH%"
  del "%%i"
)


:ENDE
endlocal

Diese Batch löscht nach dem Konvertieren die Datei aus dem in-Verzeichnis. Sie müssen deshalb etwas vorsichtig sein, dass die Pfade stimmen und nicht falsche Dateien gelöscht werden.

Nachdem Sie fertig sind, sollten Sie folgende Verzeichnisse angelegt haben:

C:\pdf
|--C:\pdf\in
|--C:\pdf\out
+--C:\pdf\bin
   |--watchdir.exe
   |--waitclose.exe
   |--convertpdf.bat
   |--C:\pdf\bin\fonts
   |  +--[Hier liegen die GhostScript-Zeichensätze]
   +--C:\pdf\bin\gs8.14
      +--[Hier liegt der Inhalt aus dem GhostScript-Verzeichnis (Version 8.14), z.B. bin, lib, ...]

Sie können nun watchdir mit folgender Befehlszeile starten:

C:\pdf\bin\watchdir C:\pdf\in C:\pdf\bin\convertpdf.bat C:\pdf

Als Parameter dienen der Pfad der überwacht werden soll, die Batch die bei Änderungen aufgerufen wird und als zusätzlicher Parameter das Basisverzeichnis. Beim ersten Start und danach bei Verzeichnisänderungen, wird C:\pdf\bin\convertpdf.bat mit den Parametern C:\pdf\in (der Eingabepfad für die PostScript-Datei) und C:\pdf (das Basisverzeichnis) aufgerufen. Die Batch ist so geschrieben, das die Dateien aus den Eingabeverzeichnis in PDF Dateien umgewandelt werden. waitclose.exe sorgt dafür, dass das Umwandeln erst startet, wenn die PostScript-Datei komplett erzeugt, bzw. kopiert wurde.

Zum Test können Sie eine PostScript Datei (.ps) in den Eingabepfad kopieren. Nach einer Zeit sollte die Datei, eine LOG-Datei mit den GhostScript-Meldungen und die PDF-Datei im Ausgabeverzeichnis C:\pdf\out erscheinen.

Zum Erzeugen der PostScript-Dateien können Sie einen PostScript Drucker Treiber (z.B. den von Adobe mit der distiller.pdd - gibt es bei Adobe zum Herunterladen), der so eingerichtet ist, dass er in eine Datei (File) ausgibt, verwenden. Wenn Sie dann die Datei in das Verzeichnis C:\pdf\in drucken wird die PostScript-Datei (hat in diesem Fall, falls Sie nichts unternehmen, die Endung .prt) in eine PDF-Datei umgewandelt.

Apropos: Zum Verschicken von E-Mails über Batch-Datei eignet sich z.B. [BLAT]


Letzte Änderung: 27. Feb 2009, Andreas Pidde
Disclaimer (deutsch)   Disclaimer (english)
[Zurück zur Homepage]