dino2002
Goto Top

in der FOR Schleife Werte aktualisieren

Hallo,

ich möchte mit einer Batch FOR Schleife nach Dateien in dem Ordner "local" suchen und diese anschließend zum Ordner "remote" verschieben und dabei den Dateinamen mit Datum und Zeit erweitern. Es funktioniert soweit, allerdings wird das Datum bei einem erneuten Aufruf der FOR Schleife beibehalten. Sprich, wenn ich 100 Dateien verschieben dann haben alle Dateien die gleiche Uhrzeit. Wie kann ich in einer FOR Schleife die Uhrzeit aktualisieren? Ich möchte jedoch die verschobenen Dateien nicht nachträglich verarbeiten "umbenennen" sondern alles mit einem Abwasch erledigen.

if "%1"=="" (
start /WAIT /B cmd.exe /V:on /C "%~0" run!
goto:eof
)

SETLOCAL

SET LOCAL_DIR=C:\Temp\local
SET REMOTE_DIR=C:\Temp\remote

FOR %%i IN (%LOCAL_DIR%\*.*) DO (

SET TIMESTP=%date:~-4%-%date:~-7,2%-%date:~-10,2%_%time:~-11,2%%time:~-8,2%%time:~-5,2%
MOVE /Y "%%i" "%REMOTE_DIR%\%%~ni_!TIMESTP!.txt"
)

Content-Key: 101565

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

Printed on: April 24, 2024 at 16:04 o'clock

Member: bastla
bastla Nov 11, 2008 at 17:53:30 (UTC)
Goto Top
Hallo Dino2002!

Du verwendest zwar "delayedExpansion" (das Kunststück mit dem "CMD"-Aufruf kannst Du aber eigentlich einsparen und "setlocal enabledelayedexpansion" dafür verwenden), allerdings musst Du natürlich auch %date% und %time% "verzögert" auflösen, also etwa:
@echo off & SETLOCAL enabledelayedexpansion

SET LOCAL_DIR=C:\Temp\local
SET REMOTE_DIR=C:\Temp\remote

FOR %%i IN (%LOCAL_DIR%\*.*) DO (
    SET TIMESTP=!date:~-4!-!date:~-7,2!-!date:~-10,2!_!time:~-11,2!!time:~-8,2!!time:~-5,2!
    MOVE "%%i" "%REMOTE_DIR%\%%~ni_!TIMESTP!.txt"  
)
Da wir schon bei Überflüssigem waren: Der Schalter "/Y" wird für "MOVE" in einem Batch nicht benötigt ...

Grüße
bastla
Member: Biber
Biber Nov 11, 2008 at 18:10:09 (UTC)
Goto Top
Moin Dino2002 und bastla,

...wobei sich mir die Frage aufdrängt, ob denn dieses kryptische Gewurschtel den erhofften Zusatznutzen bringt....

Wieso ist es denn für kommende Generationen von Bedeutung oder erhaltenswert zu wissen, ob die Datei Readme.txt denn nun um 19:04:34 oder um 19:04:37 geMOVED wurde???

Ich würde mir den Heckmeck ersparen und alle von EINEM Job (bzw. Batch) kopierten Dateien mit EINEM Zeitstempel versehen.
Das macht es auch einfacher, wenn Du mal einen kompletten Lauf löschen oder auch nur filtern willst.

Also: einmal "SET TIMESTP=20081111_190820" vor der FOR-Anweisung und kein Firlefanz mit Zeitstempel je Datei ermitteln.

Grüße
Biber
Member: Dino2002
Dino2002 Nov 11, 2008 at 22:52:18 (UTC)
Goto Top
Hallo Bastla und Biber,

danke für die schnelle und sehr hilfsreiche Unterstützung. Ich hätte noch erwähnen müssen dass die Batch anschließend noch erweitert wird um für jede übertragene Datei ein separates Logfile zu erstellen - sonst hätte ich sicherlich den einfacheren Weg gewählt face-wink

*freu*

Viele Grüße

Dino2002