Batch - Ordner nach aktuellen Dateien durchsuchen und kopieren
Hallo zusammen,
diesmal habe ich ein kleines Problem mit einem Batchprogramm.
Ich benötige ein Script, welches stündlich (per Taskplaner) einen Ordner C:\Daten\xls nach neuen Dateien durchsucht.
Wenn neue Dateien gefunden wurden, sollen diese neuen Dateien (und nur die) in einen weiteren Ordner C:\Daten\xls_temp kopiert werden.
Wie kann ich das am besten realisieren?
Mein Ansatz war folgender:
set "Datum=%date:~3,2%-%date:~0,2%-%date:~-4%"
set "logfile=log.txt"
xcopy "%Quelle%" "%Ziel%" /D:%Datum% /Y >> %logfile%
Das Script holt mir so aber alle Dateien vom heutigen Tag aus dem Ordner, genauer: ALLE Dateien von heute und überschreibt vorhandene Dateien auch.
Ich müsste es schon etwas genauer haben und brauche pro Durchlauf nur die neu hinzugekommenen Dateien.
Ein weiteres Script räumt dann den temp Ordner wieder auf, nachdem die Dateien darin verarbeitet worden sind.
Von der Theorie her müsste ich mir nur irgendwie merken, wann der letzte Durchlauf war und ab diesem Zeitpunkt wieder neu suchen.
Ich verzwicke mich da aber gerade total kompliziert, deswegen brauch ich mal Eure Hilfe.
Schöne Grüße!
diesmal habe ich ein kleines Problem mit einem Batchprogramm.
Ich benötige ein Script, welches stündlich (per Taskplaner) einen Ordner C:\Daten\xls nach neuen Dateien durchsucht.
Wenn neue Dateien gefunden wurden, sollen diese neuen Dateien (und nur die) in einen weiteren Ordner C:\Daten\xls_temp kopiert werden.
Wie kann ich das am besten realisieren?
Mein Ansatz war folgender:
set "Datum=%date:~3,2%-%date:~0,2%-%date:~-4%"
set "logfile=log.txt"
xcopy "%Quelle%" "%Ziel%" /D:%Datum% /Y >> %logfile%
Das Script holt mir so aber alle Dateien vom heutigen Tag aus dem Ordner, genauer: ALLE Dateien von heute und überschreibt vorhandene Dateien auch.
Ich müsste es schon etwas genauer haben und brauche pro Durchlauf nur die neu hinzugekommenen Dateien.
Ein weiteres Script räumt dann den temp Ordner wieder auf, nachdem die Dateien darin verarbeitet worden sind.
Von der Theorie her müsste ich mir nur irgendwie merken, wann der letzte Durchlauf war und ab diesem Zeitpunkt wieder neu suchen.
Ich verzwicke mich da aber gerade total kompliziert, deswegen brauch ich mal Eure Hilfe.
Schöne Grüße!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206286
Url: https://administrator.de/contentid/206286
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
10 Kommentare
Neuester Kommentar
Nehmen wir doch einfach das Script aus dem Nachbarthread:
.. und das dann stündlich per Taskplaner starten.
Gruss!
@echo off &setlocal
set "fname="
set "ftd="
call:GetInternational
for /f "tokens=1-3*" %%a in ('dir /a-d /tw ^| findstr /b [0-9]') do set "ftd=%%a %%b"&set "fname=%%d"&call:process
goto:eof
:process
rem Get file time:
set "fdate=%ftd:~0,10%"
set "ftime=%ftd:~11%%sTime%00%sDecimal%00"
call :GetSecs "%fdate%" "%ftime%" fileSecs
call :GetSecs "%date%" "%time%" curSecs
set /a elapsed="(curSecs-fileSecs)/60"
if %elapsed% lss 60 if not exist "C:\Daten\xls_temp\%fname%" copy "%fname%" C:\Daten\xls_temp
goto :eof
:GetInternational
:: Sets a bundle of variables by reading the registry settings
for /f "tokens=1,2*" %%a in ('reg query "HKCU\Control Panel\International"') do set "%%a=%%c"
goto :eof
:GetSecs "dateIn" "timeIn" secondsOut
:: Output: Seconds elapsed since 1th Jan. 1970 00:00:00
setlocal
set "dateIn=%~1"
for /f "tokens=2" %%i in ("%dateIn%") do set "dateIn=%%i"
for /f "tokens=1-3 delims=%sDate%" %%a in ("%dateIn%") do (
if %iDate%==0 set /a mm=100%%a%%100,dd=100%%b%%100,yy=10000%%c%%10000
if %iDate%==1 set /a dd=100%%a%%100,mm=100%%b%%100,yy=10000%%c%%10000
if %iDate%==2 set /a yy=10000%%a%%10000,mm=100%%b%%100,dd=100%%c%%100
)
for /f "tokens=1-3 delims=%sTime%%sDecimal% " %%a in ("%~2") do (
set "hh=%%a"
set "nn=%%b"
set "ss=%%c"
)
if 1%hh% lss 20 set hh=0%hh%
if /i "%nn:~2,1%" equ "p" if "%hh%" neq "12" (set "hh=1%hh%" &set /a hh-=88)
if /i "%nn:~2,1%" equ "a" if "%hh%" equ "12" set "hh=00"
if /i "%nn:~2,1%" geq "a" set "nn=%nn:~0,2%"
set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2,j=j/5+dd+y*365+y/4-y/100+y/400-2472633,j=j*86400+hh*3600+nn*60+ss
endlocal &set "%~3=%j%"
goto :eof
endlocal
Gruss!
Hallo DeeJayBee!
Zu "
Mit "
Grüße
bastla
Zu "
xcopy /m
": Es wird hier das "Archiv"-Attribut genutzt - wenn eine Datei gespeichert (= verändert oder neu erstellt) wird, setzt das System automatisch das "Archiv"-Attribut (ansehen kannst du Dir das mit "attrib
").Mit "
xcopy /m
" werden nur Dateien kopiert, bei denen dieses Attribut gesetzt ist und es wird auch zurückgesetzt - wenn sich daher die Datei seit dem letzten Lauf des Batches nicht verändert hat, dürfte sie auch nicht kopiert werden.Grüße
bastla
Damit Du Dich nicht mit den Parametern von Robocopy verhedderst, empfehle ich Dir dazu YARCGUI Robocopy GUI. Da bekommst du eine Erläuterung der Parameter.
Gruss Penny.
Gruss Penny.