turrex0100
Goto Top

Datei umbennenen mit Erstelldatum

Da ich in den änlichen Beiträgen keine Lösung gefunden habe frage ich hier.

Hallo zusammen.

Ich möchte gerne alle Dateien eines Ordners umbennenen, sodass vor den Namen das erstelldatum gesetzt wird.
Hab mir natürlich auch schon meine gedanken gemacht:

@pushd "%~1"
@for /f "tokens=1,2,3,*" %%a in ('dir *.* /a-d /-c /tc^|find "."') do set "erstdatum=%%a" & ren %%d %erstdatum:~6,4%_%erstdatum:~3,2%_%erstdatum:~0,2%_%%d
@popd

Nun würde ich gerne wissen ob ihr mir helfen könnt und warum mein skript nicht funktioniert.
Vielen Dank im Vorraus

Grüsse Turrex0100.
Kommentar vom Moderator Biber am 30.04.2010 um 10:38:35 Uhr
Datei umbennenen mit Erstelldatum
set /a rgc +=1
666
Diese (An)zahl ist wirklich böse, böse, böse... face-wink
Ich möchte gerne alle Dateien eines Ordners umbennenen,...
set /a rgc +=1
667
...aber geht auch schnell vorbei...
Zitat von @Turrex0100:
Giebt es eine Möglichkeit eine IF Abfrage einzubauen, damit schon umbennante dateien nicht nocheinmal umbennant werden??
set /a rgc +=2
669
Sauschnell sogar...

Content-ID: 141806

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

Ausgedruckt am: 16.11.2024 um 01:11 Uhr

bastla
bastla 30.04.2010 um 08:55:42 Uhr
Goto Top
Hallo Turrex0100!
... warum mein skript nicht funktioniert.
Stichwort "DelayedExpansion" ...

Unter Verwendung eines Unterprogrammes sollte es klappen (ungetestet):
@echo off & setlocal
pushD "%~1"  
for /f "tokens=1,2,3,*" %%a in ('dir *.* /a-d /-c /tc^|find "."') do set "erstdatum=%%a" & call :ProcessFile "%%d"  
PopD
goto :eof

:ProcessFile
ren %1 "%erstdatum:~6,4%_%erstdatum:~3,2%_%erstdatum:~0,2%_%~nx1"  
goto :eof
Grüße
bastla
Turrex0100
Turrex0100 30.04.2010 um 09:14:22 Uhr
Goto Top
Danke für die wie immer schnelle Antwort!

Klappt alles wie geplant.
Turrex0100
Turrex0100 30.04.2010 um 10:02:02 Uhr
Goto Top
Giebt es eine Möglichkeit eine IF Abfrage einzubauen, damit schon umbennante dateien nicht nocheinmal umbennant werden??
Snowman25
Snowman25 30.04.2010 um 10:24:58 Uhr
Goto Top
Wozu?

Eine Datei hat bloß 1 Erstellungsdatum, welches sich auch nicht ändert. (Jedenfalls nicht von selbst)

Gruß
Snow
bastla
bastla 30.04.2010 um 10:49:08 Uhr
Goto Top
@Snowman25
Wozu?
Damit nicht bei jedem Durchlauf am Anfang des Dateinamens nochmals das Datum hinzugefügt wird?

Soferne die Dateien nicht bereits vorher einen "_" im Dateinamen hatten, sollten sich die bereits umbenannten so ausfiltern lassen:
for /f "tokens=1,2,3,*" %%a in ('dir *.* /a-d /-c /tc^|find "."^|find /v "_"') do set "erstdatum=%%a" & call :ProcessFile "%%d"  
Grüße
bastla
77559
77559 30.04.2010 um 11:10:01 Uhr
Goto Top
Soferne die Dateien nicht bereits vorher einen "_" im Dateinamen hatten, sollten sich die bereits umbenannten so ausfiltern lassen

Oder man prüft ob das Datum schon da ist:

@echo off & setlocal
pushD "%~1"  
for /f "tokens=1,2,3,*" %%a in (  
  'dir *.* /a-d /-c /tc^|find "."'  
     ) do set "erstdatum=%%a" & call :ProcessFile "%%d"  
PopD
goto :eof

:ProcessFile
Set "OldName=%~1"  
Set "NewName=%erstdatum:~6,4%_%erstdatum:~3,2%_%erstdatum:~0,2%_%~nx1"  
If "%OldName:~0,10%" EQU "%NewName:~0,10%" goto :Eof  
ren %1 "%NewName%"  
goto :eof

Gruß
LotPings
bastla
bastla 30.04.2010 um 11:16:36 Uhr
Goto Top
@77559
Aufwändiger, aber natürlich genauer - wobei ich eher zu einem Ansatz der Art
echo %~nx1|findstr /b "%NewName%">nul && goto :eof
gegriffen hätte ...

Grüße
bastla
77559
77559 30.04.2010 um 11:32:18 Uhr
Goto Top
Zitat von @bastla:
Aufwändiger, aber natürlich genauer - wobei ich eher zu einem Ansatz der Art
echo %~nx1|findstr /b "%NewName%">nul && goto :eof
gegriffen hätte ...
Naja Gott sei Dank sind die PCs meist so schnell , daß man nicht darüber debattieren muß ,
ob Aufwand an Zeichen den Aufwand an Zeit bei der Ausführung einer Sub-Shell durch die Pipe überwiegt face-wink
Zumindest hat die Verwendung von Old- und NewName einen didaktischen Nutzen (hoffe ich).

Gruß
LotPings
bastla
bastla 30.04.2010 um 13:00:03 Uhr
Goto Top
@77559
"Aufwändiger" hatte sich auf die Prüfung per Substring im Vergleich zum Aussortieren der Dateinamen mit "_" bezogen (mit letzterem lässt sich der Unterprogrammaufruf einsparen).

Die "findstr"-Variante bevorzuge ich, weil ich damit nicht auf die Substring-Länge achten muss (obwohl zugegebener Maßen gerade in diesem Fall die Länge mit 10 Zeichen ja "konstant genug" sein sollte, um sie tatsächlich hardcoded zu hinterlegen) ...

Grüße
bastla
Snowman25
Snowman25 30.04.2010 um 13:01:37 Uhr
Goto Top
Zitat von @bastla:
Damit nicht bei jedem Durchlauf am Anfang des Dateinamens nochmals das Datum hinzugefügt wird?
Huch, das hatte ich glatt übersehen. Dachte, die Dateien sollen nur das Erstellungsdatum als Namen haben.

Grüße
bastla

Gruße
Snow