94erbrom
Goto Top

Ergebnis einer Suche mit dir und find mit copy kopieren

Hallo.
Ich habe hier ein Skript erstellt, dass jeweils die Log-Datei vom Vortag in einen anderen Ordner kopieren soll.
Diese soll dort dann mit dem Datum als Namen liegen.

@echo off & setlocal
set "Ordner=C:\mylogs\"
set "Ziel=F:\Log-Archiv\"
echo WScript.Echo DateAdd("d",-1, date())>%temp%\Gestern.vbs
for /f %%i in ('cscript //nologo %temp%\Gestern.vbs') do set "Gestern=%%i"
del %temp%\Gestern.vbs
echo Gestern: %Gestern%
echo Dateien:
cd %Ordner%
dir content*.log |find "%Gestern%" |copy "%Ordner%" "%Ziel"\%Gestern%.log"

Nun erhalte ich jedoch die Ausgabe, dass das System die Datei nicht finden kann.
Da läuft wohl irgend etwas bei der Pipe zwischen find und copy schief.

Freue mich auf schnelle Hilfe.
LG 94erBrom

Content-ID: 221293

Url: https://administrator.de/forum/ergebnis-einer-suche-mit-dir-und-find-mit-copy-kopieren-221293.html

Ausgedruckt am: 23.12.2024 um 02:12 Uhr

Snowman25
Snowman25 06.11.2013 um 16:11:44 Uhr
Goto Top
Hallo @94erBrom,
Zitat von @94erBrom:
Nun erhalte ich jedoch die Ausgabe, dass das System die Datei nicht finden kann.
Da läuft wohl irgend etwas bei der Pipe zwischen find und copy schief.

Uhm.. ja durchaus. Wie stellst du dir das vor, was da passieren soll? Diese Verkettung hat leider keinen Sinn..

Gruß,
@Snowman25
94erBrom
94erBrom 06.11.2013 aktualisiert um 16:22:47 Uhr
Goto Top
Die Verkettung dir content*.log |find "%Gestern%" liefert als Ergebnis die Log-Datei vom Vortag, für heute wäre das das Log vom 05.11.2013 mit dem Namen contentThu.log.
Die Verkettung dir content*.log |find "%Gestern%" funktioniert in cmd auch korrekt.
Diese Datei soll nun in den Ordner F:\Log-Archiv unter dem Namen 05.11.2013.log kopiert werden.
Wie bekomme ich das hin?
Per Pipe geht das ja wohl nicht.
Ich nehme mal an, mit einer For-Schleife?
Hilfe!!!
Snowman25
Snowman25 06.11.2013 aktualisiert um 18:06:26 Uhr
Goto Top
Dein Output nach find wird in etwa so aussehen:
05.11.2013  14:44        18.499.537 contentXYZ.log
Um da jetzt nur den Dateinamen herauszubekommen, brauchst du eine FOR-Schleife:
for /F "tokens=3*" %a IN ('dir content*.log^|find "%Gestern%"') do [...]
Der Dateiname liegt dann in %b.

Im Endeffekt also:
for /F "tokens=3" %a IN ('dir content*.log^|find "%Gestern%"') do copy %b "%Ziel%\%Gestern%.log"  

Gruß,
@Snowman25

PS: Nicht vergessen! In Batch-Dateien musst du %a und %b mit 2 %% schreiben! Also %%a und %%b.
94erBrom
94erBrom 08.11.2013 um 08:34:41 Uhr
Goto Top
Hi.
Zunächst mal danke für die schnelle Hilfe.
Habe die letzte Zeile in der .bat-Datei jetzt in
for /F "tokens=3" %%a IN ('dir content*.log^|find "%Gestern%"') do copy %%b "%Ziel%\%Gestern%.log"
geändert.
Allerdings bekomme ich nun folgende Fehlermeldung:
Gestern: 05.11.2013
Dateien:
Datei nicht gefunden
Habe jedoch, um die alten Dateien von den letzten Versuchen benutzen zu können, das Datum im System auf den 06.11.13 geändert.
Dem entsprechend findet der Befehl
dir content*.log^|find "%Gestern%"
05.11.2013 15:22 10 contentThu.log

Was mache ich noch falsch?
Ich fürchte, dass ich einfach nur eine deiner Anweisungen übersehen oder missinterpretiert habe.

LG 94erBrom
andimue
andimue 08.11.2013 um 13:27:33 Uhr
Goto Top
Hallo zusammen,

wieso macht ihr es euch so schwer: ihr könnt doch statt dem "dir content*.log" einen "dir /b content*.log" machen. Dann bekommt ihr nur die Dateinamen zurück ohne Vorlauf- und Nachlaufinfo und müsst auch nicht umständlich den Dateinamen aus der Zeile rausfisseln.
Aufpassen muss man noch, wenn der Dateinamen Blanks enthält !

Gruß
Andi
94erBrom
94erBrom 08.11.2013 um 14:23:38 Uhr
Goto Top
for /F "tokens=4,*" %%a IN ('dir %Ordner%content*.log^|find "%Gestern%"') do copy %Ordner%%%a "%Ziel%%Gestern%.log"
scheint nun zu funktionieren. Anscheinend war die Reihenfolge beim dir-Befehl falsch.
Snowman25
Snowman25 13.11.2013 um 10:34:55 Uhr
Goto Top
Zitat von @andimue:
wieso macht ihr es euch so schwer: ihr könnt doch statt dem "dir content*.log" einen "dir /b
content*.log" machen.

Könnten schon, aber dann kann man nicht mehr nach dem Änderungsdatum parsen, welcher im dir content*.log mit angezeigt wird.