lulli1
Goto Top

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

Content-Key: 86575

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

Printed on: April 24, 2024 at 15:04 o'clock

Member: bastla
bastla Apr 28, 2008 at 14:04:31 (UTC)
Goto Top
Hallo lulli1 und willkommen im Forum!

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
Dieser Batch ist, so wie auch die von Dir gespostete Version, auf die Verarbeitung von mehreren übergebenen Dateien/Ordnern ausgelegt.

Grüße
bastla
Member: lulli1
lulli1 Apr 28, 2008 at 14:54:47 (UTC)
Goto Top
Hallo bastla,

genial !!!!! Funktioniert tadellos. Vielen Dank!!!!
Interessehalber:
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?

Bei Euch kann man ne Menge lernen!

Gruß lulli1
Mitglied: 60730
60730 Apr 28, 2008 at 15:08:56 (UTC)
Goto Top
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?

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 face-wink
Member: bastla
bastla Apr 28, 2008 at 15:19:07 (UTC)
Goto Top
@timobeil
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
Mit dieser Version werden alle Dateien, nicht aber Unterordner, des übergebenen Ordners umbenannt.

Grüße
bastla
Member: lulli1
lulli1 Apr 28, 2008 at 15:36:03 (UTC)
Goto Top
...Klasse bastla,

geht! Vielen Dank!

Gruß lulli1
Member: Biber
Biber Apr 28, 2008 at 15:48:21 (UTC)
Goto Top
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:

  • 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
Member: lulli1
lulli1 Apr 28, 2008 at 16:01:29 (UTC)
Goto Top
ok, ok...
ist korrekt was biber schreibt. Merke gerade selbst die .bat, die ja in dem Ordner liegen muss, wird umbenannt und immer länger.
Der Batch müsste einen zugewiesenen Ordner anfahren und dann prüfen ob die Datei bereits mit einem Datumsschema beginnt und wenn nicht, dann loslegen. Sonst diese Datei überspringen....

Das ist vermutlich nicht umzusetzten, oder?
Dennoch zum lernen war der Beitrag von bastla klasse...

lulli1
Member: bastla
bastla Apr 28, 2008 at 17:20:14 (UTC)
Goto Top
Hallo lulli1!

... 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
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 ... face-wink
Member: Biber
Biber Apr 28, 2008 at 17:31:06 (UTC)
Goto Top
@bastla
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. face-wink
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]
Member: bastla
bastla Apr 28, 2008 at 18:30:44 (UTC)
Goto Top
@Biber

... 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 face-wink) - 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
Member: lulli1
lulli1 Apr 29, 2008 at 07:58:23 (UTC)
Goto Top
...dank Euch erstmal für den Input.
hab die .bat nun in den send to ordner gepackt und das klappt auch.

Verstehe aber den Inhalt der batch nun nicht mehr. Zu hoch! face-sad

Kann mir da mal jemand Schritt für Schritt durchhelfen? Will sowas ja gerne auch mal ohne fremde Hilfe können. Würd mich freuen...
Member: bastla
bastla Apr 29, 2008 at 09:50:21 (UTC)
Goto Top
Hallo lulli1!

Kann mir da mal jemand Schritt für Schritt durchhelfen?
Na dann geh'n wir mal los ... face-wink
@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