c't 3/09
@echo off
setlocal enabledelayedexpansion
rem *** Benutzerspezifische Anpassungen ***
set quelle=c:\Daten\Neu\Kamera
set ziel=f:\Bilder
set maske=*.tif
rem *** Ende der Anpassungen ***
echo. > %temp%\schonda.txt
for /f "tokens=*" %%d in ('dir "%ziel%\%maske%"/b /s') do (
set zieldatei=%%d
set quelldatei=!zieldatei:%ziel%\=%quelle%\!
echo !quelldatei! >> %temp%\schonda.txt
)
xcopy "%quelle%\%maske%" "%ziel%" /s /i /c /k /e /exclude:%temp%\schonda.txt
del %temp%\schonda.txt
Die Datei erhalten Sie auch über den Soft-Link.
Vor dem ersten Einsatz müssen Sie in den Variablen quelle, ziel und maske angeben, von wo nach wo das Skript welche Dateitypen kopiert soll.
Der Befehl xcopy verwendet die Option /exclude, um die schon vorhandenen Dateien zu überspringen. Deren Namen erwartet er nicht direkt, sondern man muss eine Textdatei angeben, in der sie stehen. Diese Datei erzeugt die for-Schleife: Sie iteriert über die Ausgabe des Befehls
dir "%ziel%\%maske%" /b /s
also über ein rekursives Inhaltsverzeichnis des Zielordners. Besonders trickreich ist die Zeile
set quelldatei=!zieldatei:%ziel%\=%quelle%\!
Sie speichert nämlich in der Variablen quelldatei den Inhalt von zieldatei und ersetzt dabei den Namen des Zielordners durch den des Quellordners. Das Ergebnis ist ein Dateiname, der sich auf den Quellordner bezieht, den xcopy also übergehen soll. Die hier und in der nächsten Zeile verwendeten Ausrufezeichen kennzeichnen ähnlich wie die gewohnten Prozentzeichen eine Variable. Der Unterschied ist, dass diese innerhalb eines jeden Schleifendurchlaufs neu ausgewertet wird. Microsoft nennt das „verzögerte Erweiterung von Umgebungsvariablen“; man muss dieses Feature mit dem Befehl
setlocal enabledelayedexpansion
explizit einschalten, wenn man es verwenden will.
(hos)
Version zum Drucken | Per E-Mail versenden | Heft bestellen
Permalink: http://heise.de/-325926
Das aktuelle Heft ist jetzt im Handel erhältlich.
Ältere Artikel können Sie über unser Zeitschriften-Archiv bestellen.