mtb4ever
Goto Top

String in Dateinamen suchen und nach folgende Zeichen ersetzen

Hallo,

also die Ausgangslage, habe mehrere Dateien die wie folgt aufgebaut sind (Jeden Tag 3 neue Dateien):

"Datei 1 200904240757_11111111.txt"
"Datei 2 200904240758_22222222.txt"
"Datei 3 200904240759_33333333.txt"

Wie man sieht gibt es nach dem 2 Leerzeichen ein Zeitstempel mit den Format JJJJMMDD und dann die Uhrzeit an dem die Datei erstellt wurde im Format HHMM.

Jetzt zu mein Problem: Ich brauch eine Batch Datei die die Dateinamen wie folgt anpasst:

"Datei 1 200904240759_11111111.txt"
"Datei 2 200904240759_22222222.txt"
"Datei 3 200904240759_33333333.txt"

Also sozusagen bei der Uhrzeit die neuste Zeit aus den Dateinamen entnimmt und in den anderen 2 Dateien die Dateinamen dann die Uhrzeit sucht und mit der neusten Zeit ersetzt.


Hat einer eine Idee ?

MfG Michael

Content-Key: 114739

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

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

Member: bastla
bastla Apr 27, 2009 at 11:14:38 (UTC)
Goto Top
Hallo MTB4ever!

Etwa so (wenn Aufbau und Länge der Namen konstant sind):
@echo off & setlocal enabledelayedexpansion
set "Basis=D:\Dein Ordner"  
set "Maske=Datei ? 20*.txt"  

pushd "%Basis%"  
for /f "delims=" %%i in ('dir /b "%Maske%"^|sort /+9') do set "Neueste=%%i"  
set Zeit=%Neueste:~16,4%
for /f "delims=" %%i in ('dir /b "%Maske%"') do (  
    set "Name=%%i"  
    set "Name=!Name:~,16!%Zeit%!Name:~20!"  
    echo ren "%%i" "!Name!"  
)
popd
Wegen des "echo" in der Zeile 11 wird die Umbenennung nur angezeigt - wenn's ok aussieht, das "echo" einfach ersatzlos streichen.

Grüße
bastla
Member: MTB4ever
MTB4ever Apr 27, 2009 at 12:15:05 (UTC)
Goto Top
Hi bastla,

also erstmal danke es funkioniert soweit.

Noch eine andere Frage. Die Dateien liegen normalerweise in 2 Ordnern Datei 1 + 2 in Ordner c:\temp\Ordner1 und Datei 3 in Ordner c:\Temp\Ordner2 .

kKann man die Batch so anpassen, dass das auch so funktioniert oder soll ich vorher Dateien immer erst in ein Ordner kopieren und dann wenn umbenannt wieder zurückschieben?

MfG Michael
Member: bastla
bastla Apr 27, 2009 at 14:33:11 (UTC)
Goto Top
Hallo MTB4ever!

Kann man die Batch so anpassen, dass das auch so funktioniert oder soll ich vorher Dateien immer erst in ein Ordner kopieren und dann wenn umbenannt wieder zurückschieben?
Die Anpassung ließe sich zwar machen, aber wäre vermutlich unnötiger Aufwand - aufgrund des konstanten Teiles des Dateinamens brauchst Du ja eigentlich nur zwischen den Zeilen 5 und 6
move "C:\Temp\Ordner2\Datei 3 20*.txt"
einzufügen und vor dem "popd" eine neue Zeile
move "Datei 3 20*.txt" "C:\Temp\Ordner2\"
zu platzieren.

Und (nur zur Sicherheit): Die Zeile 2 lautet dann natürlich
set "Basis=c:\temp\Ordner1"
Schöner wäre es natürlich noch, auch für den zweiten Ordner eine Variable zu verwenden und in den obigen Zeilen einzusetzen ...

Grüße
bastla
Member: MTB4ever
MTB4ever Apr 27, 2009 at 15:14:45 (UTC)
Goto Top
Danke dir vielmals! es funktioniert so!