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"
)
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"
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101565
Url: https://administrator.de/forum/in-der-for-schleife-werte-aktualisieren-101565.html
Ausgedruckt am: 23.04.2025 um 16:04 Uhr
3 Kommentare
Neuester Kommentar
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:
Da wir schon bei Überflüssigem waren: Der Schalter "/Y" wird für "MOVE" in einem Batch nicht benötigt ...
Grüße
bastla
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"
)
Grüße
bastla
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
...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