skumbi
Goto Top

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 face-smile

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 ?

Content-Key: 35696

Url: https://administrator.de/contentid/35696

Printed on: April 19, 2024 at 13:04 o'clock

Member: Biber
Biber Jul 10, 2006 at 09:23:09 (UTC)
Goto Top
Moin skumbi,

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 hast 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:
:: -------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
Member: Biber
Biber Jul 19, 2006 at 15:13:24 (UTC)
Goto Top
@skumbie
Nachfrage: Ist die Frage noch offen/beantwortet/anders gelöst?

gruß
Biber
Member: skumbi
skumbi Jul 20, 2006 at 14:08:29 (UTC)
Goto Top
Hallo Biber,

sorry für die späte Reaktion, war ein paar Tage verreist.

Mit "wir" sollte das arbeitende Volk gemeint sein, nun gut egal.

Ich habe vor diesem Thread nach passenden/ännähernden Antworten gesucht, leider vergebens.

Also erstmal Danke für deine Hilfe, jedoch bekomme ich das immer noch nicht hin:

Die angepasste Skizze sieht nun so aus:

:: -------snipp CopyVonHeute.bat ungetestete Skizze
@echo off & setlocal
Set "ZielDir=c:\test"
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% ^|find "*.dat"') 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 "*.dat"') do Set /a "Anz=%%i - %Anz%"
echo Kopiert am %date% %time%: %Anz% Dateien.>>%temp%\CopyVonHeute.log


Wenn ich sie ausführe erscheint die DOS-Box mit der Meldung "Datei nicht gefunden".

Hast du noch eine Idee ?


Gruß,
SKUMBI
Member: Biber
Biber Jul 20, 2006 at 14:27:22 (UTC)
Goto Top
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)
>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
...so sieht die Ausgabe vom DIR-Befehl sinngemäß aus.
Davon alles per Find wegfiltern, was ich nicht brauche:
>dir /A:-d *.dat|find "Datei(en)"  
              7 Datei(en)             55 Bytes
...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
Member: skumbi
skumbi Jul 20, 2006 at 14:36:12 (UTC)
Goto Top
Hallo Biber,

achso, ich dachte das "Datei(en)" sollte ersetzt werden mit dem was man sucht. Den auch so erhalte ich selbige Fehlermeldung face-sad

Gruß
Member: Biber
Biber Jul 20, 2006 at 14:58:05 (UTC)
Goto Top
Um bei deinem Beispiel mit "nur *.dat-Dateien " zu bleiben:

:: -------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
...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
Member: skumbi
skumbi Jul 20, 2006 at 15:20:55 (UTC)
Goto Top
Bin irgendwie zu blöde dafür... egal was ich mache bringt er mir "Datei nicht gefunden" *verzeifelt-guck*
Member: Biber
Biber Jul 20, 2006 at 19:51:12 (UTC)
Goto Top
...das bekommen wir schon zum Fliegen...

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. face-wink

Biber
Member: skumbi
skumbi Jul 21, 2006 at 03:18:38 (UTC)
Goto Top
Guten Morgen Biber,

danke für deine Geduld !

Zielpfad hatte ich angepasst, änder leider nichts daran.
Erhalte nun folgende Meldung (Screenshot) --> http://bilder-speicher.de/Steen635064.gratis-foto-hosting-page.html