dino2002
Goto Top

Dateinamen vergleichen und ggf. mit Datum Zeit erweitern

Hallo zusammen,

auf einem w2k3 System werden täglich neue Dateien abgelegt. Die neuen Dateien sollen im gleichen Verzeichnis mit aktuellem Datum sowie der Uhrzeit über einen geplanten Batch Job erweitert werden z. B. dateiA.txt in dateiA_Datum_Uhrzeit.txt.

Die Umbenennung funktioniert soweit, aber ich stehe weiter vor dem Problem, dass bei einem erneuten Aufruf der Batch, der Dateiname immer wieder um das aktuelle Datum sowie Uhrzeit erweitert wird - dateiA_Datum_Uhrzeit_Datum_Uhrzeit_Datum_Uhrzeit.txt …

Die Batch sieht so aus

@echo off
set mydate=%date:~-4%%date:~-7,2%%date:~-10,2%
set mytime=%time:~-11,2%%time:~-8,2%%time:~-5,2%
for /R D:\Incoming\ %%d IN (*.*) DO (
move %%d %%~dpnd_%mydate%_%mytime: =0%.txt
)
:exit

Wie könnte die Batch denn aussehen, wenn sie den Dateinamen vor der Erweiterung auf den String _Datum_Uhrzeit = z. B. „_20080807_213133“ überprüft bevor sie das aktuelle Datum&Uhrzeit einfügt?

Auf dem System darf ich nur mit w2k3 Boardmitteln arbeiten und von daher die Batch-Lösung. Ich habe bereits einige Beiträge gelesen aber leider kriege ich den Einstieg nicht so hin - vielen Dank in Voraus

Content-Key: 93923

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

Printed on: April 25, 2024 at 06:04 o'clock

Member: stbewo
stbewo Aug 08, 2008 at 06:05:24 (UTC)
Goto Top
Hi Dino,

kannst Du die umbenannten Files in der FOR Schleife nicht mit einem Read Only versehen? Die können mit einem weiteren Batchlauf nicht mehr verändert werden.

Gruß
Stefan
Member: bastla
bastla Aug 08, 2008 at 06:22:38 (UTC)
Goto Top
Hallo Dino2002 und willkommen im Forum!

Soferne Du hinsichtlich des Dateinamensformates "Name_Datum_Zeit" sicher sein kannst, müsste es ja genügen, vor dem Umbenennen zu überprüfen, ob der Name bereits das heutige Datum (soferne nicht auch ältere Dateien zu berücksichtigen wären) enthält (die Zeit ändert sich ja bei jedem Durchlauf):
@echo off & setlocal
set "mydate=%date:~-4%%date:~-7,2%%date:~-10,2%"  
set "mytime=%time:~-11,2%%time:~-8,2%%time:~-5,2%"  
set "mytime=%mytime: =0%"  
for /R D:\Incoming\ %%d IN (*.*) DO (
	for /f "tokens=2 delims=_" %%i in ("%%~nd") do (  
		if "%%i" neq "%mydate%" move "%%d" "%%~dpnd_%mydate%_%mytime%.txt"  
	)
)
Das Umwandeln ev in %mytime% enthaltener Leerzeichens in "0" braucht eigentlich nur einmal (vor der Schleife) zu erfolgen, und mit den Anführungszeichen um Dateinamen/Pfade herum erfolgt eine Absicherung gegen Probleme wegen ev darin enthaltener Leerzeichen.

Willst Du übrigens wirklich allen Dateien den Typ ".txt" geben, egal, welchen sie vorher hatten? Falls nicht, wäre ".txt" durch "%%~xd" zu ersetzen.
Nachtrag: Noch sicherer (unter der Voraussetzung, dass nur bereits mit dem Datums- / Uhrzeitzusatz versehene Dateien den Namensbestandteil "_20" [damit sollte es bis zum Ende des Jahrhunderts funktionieren face-wink] enthalten) wäre:
@echo off & setlocal
set "mydate=%date:~-4%%date:~-7,2%%date:~-10,2%"  
set "mytime=%time:~-11,2%%time:~-8,2%%time:~-5,2%"  
set "mytime=%mytime: =0%"  
for /R D:\Incoming\ %%d IN (*.*) DO (
	echo %%~nd|findstr "_20">nul || move "%%d" "%%~dpnd_%mydate%_%mytime%.txt"  
)

Grüße
bastla
Member: Dino2002
Dino2002 Aug 08, 2008 at 07:46:53 (UTC)
Goto Top
Hallo Bastla,

juhu es funktioniert "FREU" - ich habe es mir viel komplizierter vorgestellt. Damit dürfte die Batch länger funktionieren als ich face-smile

@Stefan, ebenfalls eine gute Idee - habe schon mit den Gedanken gespielt diese zu implementieren.

Vielen Dank,

Gruß Dino