Batch Datei die nur Daten ab bestimmter Grösse kopiert.
Hallo an alle Forumnutzer.
Ich komme mal direkt zur Sache.
Habe Probleme bei meiner Batch Datei ( bin noch Anfänger). Es soll später unter windows 7 laufen.
Also, die Batch Datei kopiert *.doc und *.txt Dateien in einen Backupordner, das klappt auch alles ganz gut.
Jedoch bräuchte ich einen Filter der nur Dateien ab einer bestimmten Dateigrösse kopiert,
z.B: ab 100kb kopiert der und kleinere lässt der liegen.
hoffe meine Beschreibung ist verständlich bin ja noch nicht so im Thema, wobei nach der Googelei müsste schon was hängen geblieben sein ;).
Hier mein Code:
@echo off
xcopy "C:\*.txt" %~d0\backup_a /s/c/q/r/h
xcopy "D:\*.doc" %~d0\backup_b /s/c/q/r/h
@cls
@ExIT
habe nach div. Suche folgende Ansätze gefunden. kann jedoch leider keine Verbindung aufbauen, ging meistens ums löschen von temp Dateien.
anbei die Ansätze:
1.)
@echo off & setlocal
set "List=D:\Log.txt"
set "Size=80000"
if exist "%List%" del "%List%"
for %%i in (*.jpg) do if %%~zi geq %Size% echo %%i>>"%List%"
2.)
if ($filename = 'clicks.txt'){
echo $filename . ': ' . filesize($filename) . '0';
copy("sicherungclicks.txt","clicks.txt");
}
?>
Wenn Jemand einen Tip hat wäre das total toll.
Danke
MfG
Ich komme mal direkt zur Sache.
Habe Probleme bei meiner Batch Datei ( bin noch Anfänger). Es soll später unter windows 7 laufen.
Also, die Batch Datei kopiert *.doc und *.txt Dateien in einen Backupordner, das klappt auch alles ganz gut.
Jedoch bräuchte ich einen Filter der nur Dateien ab einer bestimmten Dateigrösse kopiert,
z.B: ab 100kb kopiert der und kleinere lässt der liegen.
hoffe meine Beschreibung ist verständlich bin ja noch nicht so im Thema, wobei nach der Googelei müsste schon was hängen geblieben sein ;).
Hier mein Code:
@echo off
xcopy "C:\*.txt" %~d0\backup_a /s/c/q/r/h
xcopy "D:\*.doc" %~d0\backup_b /s/c/q/r/h
@cls
@ExIT
habe nach div. Suche folgende Ansätze gefunden. kann jedoch leider keine Verbindung aufbauen, ging meistens ums löschen von temp Dateien.
anbei die Ansätze:
1.)
@echo off & setlocal
set "List=D:\Log.txt"
set "Size=80000"
if exist "%List%" del "%List%"
for %%i in (*.jpg) do if %%~zi geq %Size% echo %%i>>"%List%"
2.)
if ($filename = 'clicks.txt'){
echo $filename . ': ' . filesize($filename) . '0';
copy("sicherungclicks.txt","clicks.txt");
}
?>
Wenn Jemand einen Tip hat wäre das total toll.
Danke
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159894
Url: https://administrator.de/forum/batch-datei-die-nur-daten-ab-bestimmter-groesse-kopiert-159894.html
Ausgedruckt am: 29.04.2025 um 09:04 Uhr
14 Kommentare
Neuester Kommentar
Hallo bastler2000 und willkommen im Forum!
Die Version 1 müsstest Du (ungetestet) etwa so abwandeln:
[Edit2] Als Ergänzung (und immer noch ungetestet
): Soferne nur relative Pfade "mitgenommen" werden sollen, etwa so:
[/Edit2]
Grüße
bastla
[Edit] Hatte übersehen, dass in unterschiedliche Zielordner kopiert und wohl auch der Pfad übernommen werden soll [/Edit]
Die Version 1 müsstest Du (ungetestet) etwa so abwandeln:
@echo off & setlocal
set "Size=80000"
for /f "delims=" %%i in ('dir /s /b D:\*.txt') do if %%~zi geq %Size% xcopy "%%i" "%~d0\backup_a%%~pnxi*" /cqrh
for /f "delims=" %%i in ('dir /s /b D:\*.doc') do if %%~zi geq %Size% xcopy "%%i" "%~d0\backup_b%%~pnxi*" /cqrh
@echo off & setlocal
set "Basis=D:\Test"
set "Size=80000"
for /f "delims=" %%i in ('dir /s /b "%Basis%\*.txt"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_a"
for /f "delims=" %%i in ('dir /s /b "%Basis%\*.doc"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_b"
goto :eof
:ProcessFile
set "Quellpfad=%~f1"
call set "RelPfad=%%Quellpfad:%Basis%=%%
xcopy %1 "%~2%RelPfad%*" /cqrh
goto :eof
Grüße
bastla
[Edit] Hatte übersehen, dass in unterschiedliche Zielordner kopiert und wohl auch der Pfad übernommen werden soll [/Edit]
Hallo @bastler2000,
Kennst du Robocopy?
Ab Vista ist es standardmäßig installiert. Bei Robocopy gibt es einen Switch namens
Gruß
Snow
Kennst du Robocopy?
Ab Vista ist es standardmäßig installiert. Bei Robocopy gibt es einen Switch namens
/MIN:n
. Dieser schließt von einem Kopiervorgang alles aus, was kleiner als deine angegebene Größe ist!Zitat von robocopy
/MIN:n :: Minimale Dateigröße - schließt Dateien aus, die kleiner als n Bytes sind.
/MIN:n :: Minimale Dateigröße - schließt Dateien aus, die kleiner als n Bytes sind.
Gruß
Snow
Hallo bastler2000!
Leider kann ich Dir nicht so ganz folgen ...
Der einfache Beispielcode für das Kopieren von *.txt-Dateien und *.doc-Dateien mit einer Größe von mindestens 80.000 Bytes steht oben, und damit werden auch nicht alle, sondern nur die entsprechenden Dateien kopiert. Wenn Du das für die Ordner A und B benötigst, solltest Du (im zweiten Ansatz) die Zeilen 2 sowie 5 und 6 anpassen ...
Das das Kopieren bei Überprüfung jeder einzelnen Dateigröße durch einen Batch vergleichsweise langsam ist, kannst Du nur durch Verwendung eines effizienteren Werkzeuges ändern - zB, indem Du Dir "
Grüße
bastla
Leider kann ich Dir nicht so ganz folgen ...
Der einfache Beispielcode für das Kopieren von *.txt-Dateien und *.doc-Dateien mit einer Größe von mindestens 80.000 Bytes steht oben, und damit werden auch nicht alle, sondern nur die entsprechenden Dateien kopiert. Wenn Du das für die Ordner A und B benötigst, solltest Du (im zweiten Ansatz) die Zeilen 2 sowie 5 und 6 anpassen ...
Das das Kopieren bei Überprüfung jeder einzelnen Dateigröße durch einen Batch vergleichsweise langsam ist, kannst Du nur durch Verwendung eines effizienteren Werkzeuges ändern - zB, indem Du Dir "
robocopy
" besorgst (gibt's auch für XP und als Download bei Microsoft) ...Grüße
bastla
Hallo bastler2000!
Abgesehen davon, dass in meinem Ansatz oben noch ein Anführungszeichen gefehlt hat, sollte es bei praktischen identischen Codeteilen "alles oder nix" heißen - mit der folgenden Variante dann hoffentlich "alles"
:
Da die Ermittlung des relativen Pfades und das Kopieren ja nach dem selben Schema erfolgen, sollte ein Unterprogramm (dem die erforderlichen Parameter - als %1 bis %3 - übergeben werden) eigentlich genügen ...
Grüße
bastla
P.S.: Code als formatiert zu posten ist übrigens gar nicht schwer ...
Abgesehen davon, dass in meinem Ansatz oben noch ein Anführungszeichen gefehlt hat, sollte es bei praktischen identischen Codeteilen "alles oder nix" heißen - mit der folgenden Variante dann hoffentlich "alles"
@echo off & setlocal
set "Basis_a=C:\Users\Meister\Desktop\a"
set "Basis_b=C:\Users\Meister\Desktop\b"
set "Size=80000"
for /f "delims=" %%i in ('dir /s /b "%Basis_a%\*.doc"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_ab" "%Basis_a%"
for /f "delims=" %%i in ('dir /s /b "%Basis_b%\*.txt"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_ab" "%Basis_b%"
goto :eof
:ProcessFile
set "Quellpfad=%~f1"
call set "RelPfad=%%Quellpfad:%~3=%%"
xcopy %1 "%~2%RelPfad%*" /cqrh >nul
goto :eof
Grüße
bastla
P.S.: Code als formatiert zu posten ist übrigens gar nicht schwer ...