Per Batch Dateien mit aktuellem Datum ermitteln - kopieren - Meldung ausgeben
Hallo Batchexperten,
die WM ist vorbei und jetzt müssen wir halt wieder mehr Zeit mit unserer Arbeit verbringen
zu meinem Problem:
ich möchte 6 verschiedene Verzeichnisse überprüfen lassen ob dort eine Datei mit aktuellem Tagesdatum vorhanden ist. Ist dies der Fall soll die jeweilige Datei in ein anderes, gemeinsames Verzeichnis kopiert werden. Zum Schluß wäre die Erstellung einer Textdatei mit Ergebnisprotokoll der krönende Abschluß (z.B: 5 Dateien kopiert... etc).
Wer kann mir helfen ?
die WM ist vorbei und jetzt müssen wir halt wieder mehr Zeit mit unserer Arbeit verbringen
zu meinem Problem:
ich möchte 6 verschiedene Verzeichnisse überprüfen lassen ob dort eine Datei mit aktuellem Tagesdatum vorhanden ist. Ist dies der Fall soll die jeweilige Datei in ein anderes, gemeinsames Verzeichnis kopiert werden. Zum Schluß wäre die Erstellung einer Textdatei mit Ergebnisprotokoll der krönende Abschluß (z.B: 5 Dateien kopiert... etc).
Wer kann mir helfen ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 35696
Url: https://administrator.de/forum/per-batch-dateien-mit-aktuellem-datum-ermitteln-kopieren-meldung-ausgeben-35696.html
Ausgedruckt am: 29.04.2025 um 02:04 Uhr
9 Kommentare
Neuester Kommentar
Moin skumbi,
Willkommen im Forum und gleich ein Hinweis.
In der Zeit, die Du zum Fragetippen verbraten hast,
- hättest Du auch die paar Zeilen Batch durch Probieren finden können oder
- hier im Forum mit der wirklich brauchbaren Suchfunktion mehrere ähnlich gelagerte Fragen und Antworten finden können.
Da Du heute noch Deinen Newbie-Bonushast hattest, hier nur die Bitte, erst dann eine Frage zu posten, wenn die Antwort wirklich nicht schon hier irgendwo zu finden ist.
Eine von Dir anzupassende Skizze wäre so:
Gruß
Biber
Willkommen im Forum und gleich ein Hinweis.
und jetzt müssen wir halt wieder mehr Zeit mit unserer Arbeit verbringen
Wen genau meinst Du mit "wir"?In der Zeit, die Du zum Fragetippen verbraten hast,
- hättest Du auch die paar Zeilen Batch durch Probieren finden können oder
- hier im Forum mit der wirklich brauchbaren Suchfunktion mehrere ähnlich gelagerte Fragen und Antworten finden können.
Da Du heute noch Deinen Newbie-Bonus
Eine von Dir anzupassende Skizze wäre so:
:: -------snipp CopyVonHeute.bat ungetestete Skizze
@echo off & setlocal
Set "ZielDir=x:\DeinSammelDir"
Set "QuellDirs=c:\subDirA, D:\SubDirB, E:\SubdirC, c:\test, \\serverdir\FreigabeZ"
for /f %%i in ('dir /A:-d %ZielDir% ^|find "Datei(en)"') do Set /a "Anz=%%i"
for /f %%i in ('dir /b /a:-d') do (echo %%~ti |find "%date%") && copy "%%~dpnxi" %zieldir%>nul
for /f %%i in ('dir /A:-d %ZielDir% ^|find "Datei(en)"') do Set /a "Anz=%%i - %Anz%"
echo Kopiert am %date% %time%: %Anz% Dateien.>>%temp%\CopyVonHeute.log
Gruß
Biber
Moin Skumbie,
ich denke, bei dem Find-Befehl gibt es noch ein Missverständnis.
Da muss es IMHO find /i "Datei(en)" heißen statt find /i *.dat.
Was an dieser Stelle gemacht wird, ist ja (Beispiel)
...so sieht die Ausgabe vom DIR-Befehl sinngemäß aus.
Davon alles per Find wegfiltern, was ich nicht brauche:
...und davon wiederum will ich nur die "7" ..
Hab nicht weiter getestet, aber diese Stelle ist in Deinem Code auf jeden Fall nicht ganz richtig.
Gruß
Biber
ich denke, bei dem Find-Befehl gibt es noch ein Missverständnis.
Da muss es IMHO find /i "Datei(en)" heißen statt find /i *.dat.
Was an dieser Stelle gemacht wird, ist ja (Beispiel)
>dir /A:-d d:\test\*.dat
Datenträger in Laufwerk D: ist Daten
Volumeseriennummer: 0815-4711
Verzeichnis von D:\test
05.07.2006 18:58 10 datei1.dat
05.07.2006 18:58 10 datei2.dat
05.07.2006 18:58 11 datei3.dat
05.07.2006 19:01 6 neudatei1.dat
05.07.2006 19:01 6 neudatei2.dat
05.07.2006 19:01 6 neudatei3.dat
05.07.2006 19:01 6 neuneudatei1.dat
7 Datei(en) 55 Bytes
0 Verzeichnis(se), xxxxxxxxxxxxx Bytes frei
Davon alles per Find wegfiltern, was ich nicht brauche:
>dir /A:-d *.dat|find "Datei(en)"
7 Datei(en) 55 Bytes
Hab nicht weiter getestet, aber diese Stelle ist in Deinem Code auf jeden Fall nicht ganz richtig.
Gruß
Biber
Um bei deinem Beispiel mit "nur *.dat-Dateien " zu bleiben:
So in etwa... wobei ich den Datei-Typ "*.dat" eher als Parmeter übergeben würde.
...und wenn Du die Fehlermeldung "Datei nicht gefunden" noch unterdrücken willst, falls in einem Unterverzeichnis keine *.dat-Dateien vorhanden sind, dann hinter den DIR-Befehl noch ein 2>nul anhängen.
Beispiel:
for /f %%i in ('dir /b /s /a:-d %QuellDir%\%1 ^2^>nul') do....
Gruß
Biber
:: -------snipp CopyVonHeute.bat ungetestete Skizze
@echo off & setlocal
Set "ZielDir=d:\temp"
Set "QuellDirs=Q:\VK\a, Q:\VK\b, Q:\VK\c, Q:\VK\d, Q:\VK\e, Q:\VK\f"
for /f %%i in ('dir /A:-d %ZielDir%\*.dat ^|find "Datei(en)"') do Set /a "Anz=%%i"
For %%q in (%quellDirs%) do (
for /f %%i in ('dir /b /s /a:-d %%q\*.dat') do (echo %%~ti |find "%date%") && copy "%%~dpnxi" %zieldir%>nul
)
for /f %%i in ('dir /A:-d %ZielDir%\*.dat ^|find "Datei(en)"') do Set /a "Anz=%%i - %Anz%"
echo Kopiert am %date% %time%: %Anz% Dateien.>>%temp%\CopyVonHeute.log
:: -------snapp CopyVonHeute.bat ungetestete Skizze
So in etwa... wobei ich den Datei-Typ "*.dat" eher als Parmeter übergeben würde.
:: -------snipp CopyVonHeute2.bat ungetestete Skizze mit Parameter
@echo off & setlocal
If [%1]== %0 *.*
Set "ZielDir=d:\temp"
Set "QuellDirs=Q:\VK\a, Q:\VK\b, Q:\VK\c, Q:\VK\d, Q:\VK\e, Q:\VK\f"
for /f %%i in ('dir /A:-d %ZielDir%\%1 ^|find "Datei(en)"') do Set /a "Anz=%%i"
For %%q in (%quellDirs%) do (
for /f %%i in ('dir /b /s /a:-d %%q\%1') do (echo %%~ti |find "%date%") && copy "%%~dpnxi" %zieldir%>nul
)
for /f %%i in ('dir /A:-d %ZielDir%\%1 ^|find "Datei(en)"') do Set /a "Anz=%%i - %Anz%"
echo Kopiert am %date% %time%: %Anz% Dateien.>>%temp%\CopyVonHeute.log
:: -------snapp CopyVonHeute2.bat ungetestete Skizze
Beispiel:
for /f %%i in ('dir /b /s /a:-d %QuellDir%\%1 ^2^>nul') do....
Gruß
Biber
...das bekommen wir schon zum Fliegen...
vielleicht hast Du überlesen, dass ich in meinem Beispiel den Zielpfad geändert hatte:
Sonst nimm mal bitte bei deinem Batch das "Echo off" raus und starte ihn vom CMD-Prompt.
Und poste die entstehenden Fehlermeldungen.
Ist genug Platz dafür unter meinem Kommentar.
Ich habe hier schon mehrzeilige Bätche zum Laufen gebracht, dafür gibt es Zeugen.
Biber
vielleicht hast Du überlesen, dass ich in meinem Beispiel den Zielpfad geändert hatte:
Set "ZielDir=d:\temp"
... weil ich wenigstens den ersten Schritt (Anzahl Dateien VOR der Kopier-Aktion) bei mir testen wollte.Sonst nimm mal bitte bei deinem Batch das "Echo off" raus und starte ihn vom CMD-Prompt.
Und poste die entstehenden Fehlermeldungen.
Ist genug Platz dafür unter meinem Kommentar.
Ich habe hier schon mehrzeilige Bätche zum Laufen gebracht, dafür gibt es Zeugen.
Biber