geändert am Datum einer Datei in Dateinamen aufnehmen
Hallo zusammen,
habe in einem Beitrag hier folgende von mir leicht abgewandelte batch gefunden.
Wenn man per Maus Dateien auf diesen batch zieht und loslässt, wird das aktuelle Datum in den Dateinamen übernommen und vor den alten Dateinamen gesetzt.
Wie bekomme ich denn auf dem selben Weg das "geändert am" Datum der Datei statt dem aktuellen Datum vor den Dateinamen?
Wie muss der Batch aussehen damit das klappt?
Danke für Eure Hilfe!!!
Grüße lulli1
:: *STARTDatum_in_Dateiname.bat
@echo OFF
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%d%%c"-"%%b"-"%%a"_"
@echo %cdate%
:start
ren %1 "%cdate%%~n1%~x1"
if exist %2 goto weiter
goto EOF
:weiter
shift
goto start
:EOF
:: *STOP
habe in einem Beitrag hier folgende von mir leicht abgewandelte batch gefunden.
Wenn man per Maus Dateien auf diesen batch zieht und loslässt, wird das aktuelle Datum in den Dateinamen übernommen und vor den alten Dateinamen gesetzt.
Wie bekomme ich denn auf dem selben Weg das "geändert am" Datum der Datei statt dem aktuellen Datum vor den Dateinamen?
Wie muss der Batch aussehen damit das klappt?
Danke für Eure Hilfe!!!
Grüße lulli1
:: *STARTDatum_in_Dateiname.bat
@echo OFF
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%d%%c"-"%%b"-"%%a"_"
@echo %cdate%
:start
ren %1 "%cdate%%~n1%~x1"
if exist %2 goto weiter
goto EOF
:weiter
shift
goto start
:EOF
:: *STOP
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 86575
Url: https://administrator.de/forum/geaendert-am-datum-einer-datei-in-dateinamen-aufnehmen-86575.html
Ausgedruckt am: 01.05.2025 um 04:05 Uhr
12 Kommentare
Neuester Kommentar
Hallo lulli1 und willkommen im Forum!
Versuch es damit:
Dieser Batch ist, so wie auch die von Dir gespostete Version, auf die Verarbeitung von mehreren übergebenen Dateien/Ordnern ausgelegt.
Grüße
bastla
Versuch es damit:
:: *AenderungsDatum_in_Dateiname.bat
@echo off & setlocal
for %%i in (%1) do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do set "CDATE=%%c-%%b-%%a"
@echo %cdate%
:start
ren %1 "%cdate%_%~nx1%"
if "%~2"=="" goto :eof
if not exist %2 goto :eof
shift
goto :start
Grüße
bastla

Wie müsst das Script denn ausschauen, wenn man alle Dateien eines bestimmten
Ordners, z.B. "C:\Test" automatisch mit dem Batch umbenennen will ohne diese erst auf den Batch zu ziehen?
Ordners, z.B. "C:\Test" automatisch mit dem Batch umbenennen will ohne diese erst auf den Batch zu ziehen?
Hi,
wenn du "name_der_batch" leerzeichen "Pfad&Ordner" - also c:\test- in eine andere Textdatei schreibst und diese als Batch .cmd oder .bat abspeicherst, mußt du an der Batch vom Bastla nichts mehr ändern
@timobeil
Nicht ganz - damit würde nur der Ordner selbst umbenannt ...
@lulli1
Sollte etwa so gehen:
Mit dieser Version werden alle Dateien, nicht aber Unterordner, des übergebenen Ordners umbenannt.
Grüße
bastla
Nicht ganz - damit würde nur der Ordner selbst umbenannt ...
@lulli1
Sollte etwa so gehen:
:: *AenderungsDatum_aller_Dateien_in_Dateiname.bat
@echo off & setlocal
if not exist "%~1\" goto :eof
pushd %1
for /f "delims=" %%i in ('dir /b /a-d') do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ren "%%i" "%%c-%%b-%%a_%%~nxi"
popd
Grüße
bastla
Na ja, lulli1,
trotz aller Euphorie und trotz der gewohnten handwerklichen Perfektion von bastlas Lösung....
Nu' lass es uns erst mal in Gedanken durchspielen, ob das wirklich so nobelpreisverdächtig ist, was wir bis jetzt als den Plan kennen.
Wenn Du den Umbenenn/Änderungsstempelbatch tatsächlich nutzt bei Änderungen und Deine KrimsKramsNotizen.txt ist dabei, dann passiert innerhalb von drei Tagen folgendes:
Ich denke, so nach 7 oder 8 Monaten des Änderungs-Stempelns werden die Dateinamen zur Hälfte bei Deinen Nachbarn zur Rechten über den Frühstückstisch hängen.
Wollen wir nicht "den Plan" (Version 0.01) nochmal öffentlich diskutieren/optimieren?
Grüße
Biber
trotz aller Euphorie und trotz der gewohnten handwerklichen Perfektion von bastlas Lösung....
Nu' lass es uns erst mal in Gedanken durchspielen, ob das wirklich so nobelpreisverdächtig ist, was wir bis jetzt als den Plan kennen.
Wenn Du den Umbenenn/Änderungsstempelbatch tatsächlich nutzt bei Änderungen und Deine KrimsKramsNotizen.txt ist dabei, dann passiert innerhalb von drei Tagen folgendes:
- Aus KrimsKramsNotizen.txt wird am 28.04.2008 um 18h ---> 2008-04-28_KrimsKramsNotizen.txt
- Morgen wird daraus 2008-04-29_2008-04-28_KrimsKramsNotizen.txt, und zwar morgens um 14h.
- und nachmittags stempelst Du nochmal das ganze Verzeichnis um 23h ---> 2008-04-29__2008-04-29_2008-04-28_KrimsKramsNotizen.txt
Ich denke, so nach 7 oder 8 Monaten des Änderungs-Stempelns werden die Dateinamen zur Hälfte bei Deinen Nachbarn zur Rechten über den Frühstückstisch hängen.
Wollen wir nicht "den Plan" (Version 0.01) nochmal öffentlich diskutieren/optimieren?
Grüße
Biber
Hallo lulli1!
Damit die eine Zeile nicht gar so lang ist, habe ich sie ein wenig aufgeteilt.
Bliebe noch die Frage offen, was mit einer "blabla.txt" passieren soll, von der es bereits eine vom selben Tag stammende Version, zB "2008-04-28_blabla.txt", gibt - diese kann natürlich nicht umbenannt werden ...
Grüße
bastla
P.S.: Der Suchbegriff mit "^20[0-9]" ist zugegeben recht optimistisch angelegt ...
... die .bat, die ja in dem Ordner liegen muss ...
Diese Notwendigkeit besteht eigentlich nicht - eine Verknüpfung auf dem Desktop oder in einem anderen Ordner (zB "%userprofile%\SendTo" würde sich anbieten) sollte es doch auch tun - aber zur Sicherheit kann ja die Batchdatei selbst von der Umbenennung ausgenommen werden (siehe unten).... prüfen ob die Datei bereits mit einem Datumsschema beginnt ...
... ginge mit "findstr" - zusammen mit der "Selbstkontrolle" etwa so:@echo off & setlocal
if not exist "%~1\" goto :eof
pushd %1
for /f "delims=" %%i in ('dir /b /a-d^|findstr /v "^20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]_"') do (
if /i "%%i" neq "%~0" for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ren "%%i" "%%c-%%b-%%a_%%~nxi"
)
popd
Bliebe noch die Frage offen, was mit einer "blabla.txt" passieren soll, von der es bereits eine vom selben Tag stammende Version, zB "2008-04-28_blabla.txt", gibt - diese kann natürlich nicht umbenannt werden ...
Grüße
bastla
P.S.: Der Suchbegriff mit "^20[0-9]" ist zugegeben recht optimistisch angelegt ...
@bastla

Und den Batch selbst kann lulli1 jetzt auch unter einem leicht zu merkenden Namen im selben Verzeichnis lassen, z.B. als 2069-69-69_Stempler.bat...
Grüße
Biber
[Edit] Ach, doch nicht... die Suchmaske ist zu restriktiv.. aber 2000-08-15_batch ginge..[/Edit]
diese kann natürlich nicht umbenannt werden ...
... da sie aber schon durch das "FindStr /v .." von allen Veranstaltungen ausgeschlossen wird, ist die Frage eher ein zweitrangiges Problem. Und den Batch selbst kann lulli1 jetzt auch unter einem leicht zu merkenden Namen im selben Verzeichnis lassen, z.B. als 2069-69-69_Stempler.bat...
Grüße
Biber
[Edit] Ach, doch nicht... die Suchmaske ist zu restriktiv.. aber 2000-08-15_batch ginge..[/Edit]
@Biber
) - allerdings wäre der Batch (wenn schon nicht auf dem Desktop) eine Ebene höher für das geplante "Draggen und dann Droppen" des Ordners ohnehin besser platziert ...
Grüße
bastla
... da sie aber schon durch das "FindStr /v .." von allen Veranstaltungen ausgeschlossen wird ...
Wird sie nicht - gemeint war die erstere, und diese heißt ja bisher (und auch weiterhin, wenn eine Datei mit dem vorgesehenen neuen Namen bereits vorhanden ist) nur "blabla.txt".Und den Batch selbst kann lulli1 jetzt auch unter einem leicht zu merkenden Namen im selben Verzeichnis lassen, z.B. als 2069-69-69_Stempler.bat...
Hatte ich mir auch überlegt (wenngleich mit leicht abweichendem Datum Grüße
bastla
Hallo lulli1!

Grüße
bastla
Kann mir da mal jemand Schritt für Schritt durchhelfen?
Na dann geh'n wir mal los ... @echo off & setlocal
::Falls der übergebene Ordner nicht existiert (bei Drag & Drop eher auszuschließen), Batch beenden
if not exist "%~1\" goto :eof
::Vorübergehend in den Ordner wechseln - erspart die Berücksichtigung von Pfaden
pushd %1
::Es sollen nur Dateien bearbeitet werden, daher eine Auflistung mit "dir /b /a-d" erzeugen,
::außerdem Dateinamen ausfiltern, die mit dem Suchmuster "20##-##-##_" beginnen,
::wobei, unter der Annahme eines gültigen Datums, jeweils nach "-" nur 0 oder 1
::(für die Monatszahl) bzw 0 bis 3 (für den Tag) berücksichtigt wird.
for /f "delims=" %%i in ('dir /b /a-d^|findstr /v "^20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]_"') do (
::Wenn der Dateiname nicht gleich dem Namen der Batchdatei ohne Berücksichtigung
::von Groß-/Kleinschreibung und ohne ev umschließende Anführungszeichen (daher
::anstelle von "%0" die Schreibweise "%~0") ist (die Batchdatei selbst soll ja nicht
::umbenannt werden),
::Änderungsdatum auslesen und zerlegen sowie zum Umbenennen neu zusammensetzen
::(%%c = Jahr, %%b = Monat, %%a = Tag) und nach einem "_" den Namen und den Typ
::(die Extension) der Datei anfügen (anstelle von "%%~ni%%~xi" genügt "%%~nxi")
if /i "%%i" neq "%~0" for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do ren "%%i" "%%c-%%b-%%a_%%~nxi"
)
::Zum ursprünglichen Ordner zurückkehren (das "pushd" rückgängig machen)
popd
Grüße
bastla