Batch Eine bestimmte Anzahl von Dateien kopieren, Zielordne ist aber leer
Hallo
Ich hoffe das hier mir jemand weiterhelfen kann
Folgendes Problem.
Ich habe hier mehrere Ordner in denen immer neue Bilder reinkommen. Diese werden für uns für eine Analyse benötigt.
Da man aber meist nicht alle benötigt, sondern nur die letzten 20 oder 30 neuesten, dachte ich ich löse das mit ner Batch,
Allerdings bin ich da jetzt an meine Grenzen gestoßen.
Somit, ist es möglich von mehreren Ordnern nur die letzten 20 neuesten Dateien zu kopieren, wobei der Zielordner leer ist?!
Vielen Dank schon mal.
Ich hoffe das hier mir jemand weiterhelfen kann
Folgendes Problem.
Ich habe hier mehrere Ordner in denen immer neue Bilder reinkommen. Diese werden für uns für eine Analyse benötigt.
Da man aber meist nicht alle benötigt, sondern nur die letzten 20 oder 30 neuesten, dachte ich ich löse das mit ner Batch,
Allerdings bin ich da jetzt an meine Grenzen gestoßen.
Somit, ist es möglich von mehreren Ordnern nur die letzten 20 neuesten Dateien zu kopieren, wobei der Zielordner leer ist?!
Vielen Dank schon mal.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 26.02.2012 um 14:17:40 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell".
Content-ID: 180801
Url: https://administrator.de/contentid/180801
Ausgedruckt am: 17.11.2024 um 19:11 Uhr
15 Kommentare
Neuester Kommentar
Moin,
ich würde dies via robocopy machen. An diesem Thema Robocopy bin ich auch gerade dran!!! Das Tool ist echt super und dort kannst duch da es sich am Besten mit cmd Befehlen handelt kannst du die Befehle direkt in ein Batch eingeben.
Gruß
Karsten
ich würde dies via robocopy machen. An diesem Thema Robocopy bin ich auch gerade dran!!! Das Tool ist echt super und dort kannst duch da es sich am Besten mit cmd Befehlen handelt kannst du die Befehle direkt in ein Batch eingeben.
Gruß
Karsten
moin,
Yupp das ist durchaus möglich, allerdings würde ich die Reihenflge umdrehen und die ersten Treffer solange kopieren, bis 20 erreicht ist.
PS:
Sicherlich willst du das per Batch erledigen, also wäre die Fragestellung besser unter Batch aufgehoben.
Somit, ist es möglich von mehreren Ordnern nur die letzten 20 neuesten Dateien zu kopieren, wobei der Zielordner leer ist?!
Yupp das ist durchaus möglich, allerdings würde ich die Reihenflge umdrehen und die ersten Treffer solange kopieren, bis 20 erreicht ist.
PS:
Sicherlich willst du das per Batch erledigen, also wäre die Fragestellung besser unter Batch aufgehoben.
Hallo sugram und willkommen im Forum!
Sollte sich (ungetestet) etwa so machen lassen:
Grüße
bastla
Sollte sich (ungetestet) etwa so machen lassen:
@echo off & setlocal
set "Quelle=D:\Ordner mit neuen Bildern"
set "Typ=jpg"
set "Ziel=D:\Zielordner"
set /a Anzahl=20
pushd "%Quelle%"
for /f "delims=" %%i in ('dir /b /o-d *.%Typ%') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set /a Anzahl-=1
if %Anzahl% geq 0 copy %1 "%Ziel%"
goto :eof
bastla
moin,
das geht sogar auch ohne Unterprogram:
auch in der CMD-Line
[Edit]
hinweis von bastla - berichtigt.
[/Edit]
Gruß Phil
das geht sogar auch ohne Unterprogram:
auch in der CMD-Line
wobei der Zielordner leer ist?!
@echo off & setlocal
set "Quelle=D:\Ordner mit neuen Bildern"
set "Typ=jpg"
set "Ziel=D:\Zielordner"
if exist "%Ziel%\*%Typ%" exit /b 1
set /a Anzahl=20
pushd "%Quelle%"
set /a x=Anzahl+1
(for /f "delims=" %%i in ('dir /b /o-d *.%Typ%') do @set /a x-=1,y=1/x &&>&3 copy "%%i" "%Ziel%" || set /a x=1) >nul 2>nul
popD
[Edit]
hinweis von bastla - berichtigt.
[/Edit]
Gruß Phil
Hallo sugram!
Wie viele Bilder befinden sich denn im fraglichen Ordner, und wo liegt dieser (auf einer lokalen Platte oder auf einem Netzlaufwerk / NAS)?
Grüße
bastla
Habe für 5 Dateien ca 30 -40 sec gebraucht.
Ich kann mir eigentlich nicht vorstellen, dass das am Batch liegt - auch wenn Du meine zuletzt gepostete Zeile als Ersatz der Zeile 8 im ursprünglichen Batch verwendest (die Zeilen 12 bis 15 werden dann nicht mehr benötigt) und damit testest, sollte es keinen nennenswerten Unterschied in der Laufzeit geben ...Wie viele Bilder befinden sich denn im fraglichen Ordner, und wo liegt dieser (auf einer lokalen Platte oder auf einem Netzlaufwerk / NAS)?
Grüße
bastla
Hallo sugram!
Ungetestet etwa so:
Zielordner wären in diesem Fall "D:\Zielordner\seite1", "D:\Zielordner\seite2", ... und kopiert werden jeweils 20 Dateien ...
Grüße
bastla
Ungetestet etwa so:
@echo off & setlocal
set "Quelle=\\share\Objekt1"
set "Typ=jpg"
set "Ziel=D:\Zielordner"
set /a Anzahl=20
for /d %%a in ("%Quelle%\*") do for /f "tokens=1* delims=:" %%i in ('dir /b /o-d "%%a\*.%Typ%"^|findstr /n "^"') do if %%i leq %Anzahl% xcopy "%%a\%%j" "%Ziel%\%%~nxa\"
Grüße
bastla
Zitat von @sugram:
Vielen Dank, klappt wunderbar!
Ich glaube langsam ich nerve euch, aber ich bekomme das leider nicht hin.
Vielen Dank, klappt wunderbar!
Ich glaube langsam ich nerve euch, aber ich bekomme das leider nicht hin.
Moin,
Wenn du mich damit meinst, ja - denn ich schrieb dir gleich verschiebe die frage nach batch & shell.
Und was deinen aenderungswunsch angeht,
Edit so viel lesen musst du garnicht, denn achon seine erste antwort zielt genau dahin.
Versuche mal ein paar geloeste threads vom bastla anzusehen, er arbeitet gerne mit unterprogrammen.
Mit anderen worten,, jetzt kaut er (die batch) Alles durch und mit einer simplen anpassung koennte die locker alles unter 20 abarbeiten und dann abbrechen.
Dazu musst du aber jeden ordner seperat ansprechen und nicht wie jetzt einen samt unterordnern.
Also versuch mal, meinen vorschlaegen zu folgen, denn wir koennen das-aber davon lernst du nix.
Und dann finde ich es immer schade, wenn man versucht den fragestellern einen tipp zu geben und wenn man dan merken darf, das der in den wind geschrieben wird- hat man(ich) keine lust mehr.
Gruss
Gruss
@t-mo
Das Abbrechen von Schleifen ist so eine Sache für sich ...
Ich würde eher zu einem anderen Ansatz (dem Gegenteil Deiner ursprünglichen Idee) greifen - ungetestet etwa so:
Aus edukativen Gründen verzichte ich (vorläufig) auf eine Erkklärung der Vorgangsweise ...
Grüße
bastla
Das Abbrechen von Schleifen ist so eine Sache für sich ...
Ich würde eher zu einem anderen Ansatz (dem Gegenteil Deiner ursprünglichen Idee) greifen - ungetestet etwa so:
@echo off & setlocal
set "Quelle=\\share\Objekt1"
set "Typ=jpg"
set "Ziel=D:\Zielordner"
set /a Anzahl=20
for /d %%a in ("%Quelle%\*") do call :ProcessDir "%%a"
goto :eof
:ProcessDir
set /a Skip=0
for /f %%i in ('dir "%~1\*.%Typ%"^|findstr "Datei(en)" 2^>nul') do set /a Skip=%%i - Anzahl
if %Skip% lss 0 set /a Skip=0
for /f "delims=" %%i in ('dir /b /od /a-d "%~1\*.%Typ%"^|more +%Skip%') do xcopy "%~1\%%i" "%Ziel%\%~nx1\"
goto :eof
Grüße
bastla