c't 22/09
for /f %f in ('dir /b /s c:\Bilder\*.jpg') do xcopy %f d:\Backup
for /f "tokens=*" %%f in ('dir /b /s "%quellwurzel%\%maske%"')
for noch die Option “tokens=*“ dazubekommen, damit Dateinamen nicht an Leerzeichen auseinandergerissen werden. Die Schleife iteriert über die Ausgabe des Befehls dir /b /s "%quellwurzel%\%maske%"
dir alle Unterordner mit ein (/s) und verwendet ein einfaches Ausgabeformat (/b). Die Anführungszeichen sind wieder möglichen Leerzeichen geschuldet. Die Optionen des Kopierbefehls xcopy /h /i /k /d /y "%%f" "%ziel%"
xcopy versteckte Dateien einschließt (/h), Attribute mitkopieren (/k) und das Ziel als Ordnername auffasst (/i). Bei doppelten Dateinamen soll eine neuere Datei nicht von einer älteren überschrieben werden (/d), andersrum soll xcopy beim Überschreiben einer älteren Datei durch eine neuere aber nicht mehr nachfragen (/y). Das folgende |find /v „Datei(en) kopiert“
/y bei xcopy entfernen, um selbst zu entscheiden, ob Dateien überschrieben werden sollen, müssen Sie auch den find-Befehl opfern, denn sonst bekommen Sie die Frage nicht zu sehen. dir im Ursprungsverzeichnis. @echo off
if %2. == . (
echo Nicht genug Parameter.
echo Aufruf: %~n0 ^<Quelle^> ^<Ziel^>
[Maske]
echo Beispiel: %~n0 c:\Bilder d:\Backup *.jpg
echo Kopiert alle *.jpg-Dateien aus
c:\Bilder und Unterordnern "flach"
echo nach d:\Backup. Ist [Maske]
nicht angegeben, werden alle Dateien
echo kopiert.
exit /b
)
setlocal
set quellwurzel=%~f1
set ziel=%~f2
set maske=%3
if %maske%. == . set maske=*
echo Kopiere %maske% von %quellwurzel% nach
%ziel% ...
for /f "tokens=*" %%f in ('dir /b /s "%quell
wurzel%\%maske%"') do (
xcopy /h /i /c /k /d /y "%%f" "%ziel%" |find
/v "Datei(en) kopiert"
)
dir /s "%quellwurzel%\%maske%" > %~n0.log
Version zum Drucken | Per E-Mail versenden | Heft bestellen
Permalink: http://heise.de/-810036
Das aktuelle Heft ist jetzt im Handel erhältlich.
Ältere Artikel können Sie über unser Zeitschriften-Archiv bestellen.