Dateien mit Erstelldatum und Zeit renamen
Hallo zusammen
Ich habe folgendes Problem; ich habe bereits einen Batch der soweit auch einwandfrei funktioniert. Jetzt möchte ich diesen Batch jedoch mit Sekunden erweitern. Ich benötige die Sekunden weil ich teilweise Dateien mit dem Erstell Datum in der gleichen Minute umbenennen will.
Code Schnippsel
@echo off
for /F "Tokens=1-5,*" %%f in ('dir /a-D /Tc /-C ^|find "."') do call :loop %%f %%g %%h %%i
goto Ende
:loop
set DirDatetime=%1%2
set MyDateTime=%DirDateTime:~6,4%%DirDateTime:~3,2%%DirDateTime:~0,2%-%DirDateTime:~10,2%%DirDateTime:~13,2%%DirDateTime:~16,2%
rename %~f4 %MyDateTime%%~x4
:Ende
Datei mit aktuellem Code: yyyymmdd-hhmm_filenname.txt
Gewünschtes Ergebnis: yyyymmdd-hhmmss_filenname.txt
Besten Dank für eure Unterstützung.
Gruss
Zufi
Ich habe folgendes Problem; ich habe bereits einen Batch der soweit auch einwandfrei funktioniert. Jetzt möchte ich diesen Batch jedoch mit Sekunden erweitern. Ich benötige die Sekunden weil ich teilweise Dateien mit dem Erstell Datum in der gleichen Minute umbenennen will.
Code Schnippsel
@echo off
for /F "Tokens=1-5,*" %%f in ('dir /a-D /Tc /-C ^|find "."') do call :loop %%f %%g %%h %%i
goto Ende
:loop
set DirDatetime=%1%2
set MyDateTime=%DirDateTime:~6,4%%DirDateTime:~3,2%%DirDateTime:~0,2%-%DirDateTime:~10,2%%DirDateTime:~13,2%%DirDateTime:~16,2%
rename %~f4 %MyDateTime%%~x4
:Ende
Datei mit aktuellem Code: yyyymmdd-hhmm_filenname.txt
Gewünschtes Ergebnis: yyyymmdd-hhmmss_filenname.txt
Besten Dank für eure Unterstützung.
Gruss
Zufi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37026
Url: https://administrator.de/forum/dateien-mit-erstelldatum-und-zeit-renamen-37026.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
5 Kommentare
Neuester Kommentar
Moin Zufi,
das geht nicht mit dem normalen DIR-Befehl... oder genauer gesagt, M$ zeigt dir zwar in allen möglichen GUIs angefangen vom Explorer die Sekunden der Datei-Datumswerte an.
Nicht aber unter dem CMD.
Auch nicht mit Reg-Hacks und Tweaks.
Einzige Chance (allerdings ziemlich aufwändig): die Datei-Sekunden über JS/VBS ermitteln.
Und ggf. im Batch weiterverarbeiten.
Wenn Dich der Aufwand nicht schreckt, zwei kurze Skizzen.
a) Kleine *-vbs-Datei erstellen, die das Datum einer existierenden Datei zurückgibt.
Ein Aufruf am CMD-Prompt liefert z.B.:
...also irgendwas mit den Datei-Sekunden...und die kann ich da rauspuzzlen genauso wie aus der DIR-Ausgabe.
b) Dasselbe mit temporär erzeugter VBS-Datei aus einem Batch heraus:
Output am CMD-Prompt (zum weiterverbeiten mit FOR /F...
So wäre ungefähr die Skizze...
und den Dateinamen dann eben basteln wie Du es oben auch schon machst:
for /f "tokens=1-6 delims=.:" %%a in ("08.03.2006 10:52:41") do ....
...wobei dann Token 1 wieder der Tag, Token 2 der Monat.....Token 6 die Sekunden wären.
und natürlich in der FOR-/F -Klammer nicht "08.03.2006 10:52:41" im Klartext steht, sondern etwas wie
Hope that Helps.
Biber
das geht nicht mit dem normalen DIR-Befehl... oder genauer gesagt, M$ zeigt dir zwar in allen möglichen GUIs angefangen vom Explorer die Sekunden der Datei-Datumswerte an.
Nicht aber unter dem CMD.
Auch nicht mit Reg-Hacks und Tweaks.
Einzige Chance (allerdings ziemlich aufwändig): die Datei-Sekunden über JS/VBS ermitteln.
Und ggf. im Batch weiterverarbeiten.
Wenn Dich der Aufwand nicht schreckt, zwei kurze Skizzen.
a) Kleine *-vbs-Datei erstellen, die das Datum einer existierenden Datei zurückgibt.
'-----snipp FileDate.vbs
Set fso = CreateObject ("Scripting.FileSystemObject")
Set f = fso.getfile(wscript.arguments(0))
WScript.echo f.datecreated & " " & f.name
'--------snapp FileDate.vbs
>cscript //nologo f:\filedate.vbs d:\temp\sqlcmd.exe
08.03.2006 10:52:41 sqlcmd.exe
b) Dasselbe mit temporär erzeugter VBS-Datei aus einem Batch heraus:
:: ----snipp-- getFileDateViaBatch.bat
@echo off & Setlocal
set "vbstemp=%temp%\getfiledate.vbs"
echo Set fso = CreateObject ("Scripting.FileSystemObject") >%vbstemp%
echo Set f = fso.getfile(wscript.arguments(0)) >>%vbstemp%
echo WScript.echo f.datecreated >>%vbstemp%
cscript //nologo %vbstemp% d:\temp\sqlcmd.exe
del %vbstemp%
:: ----snapp-- getFileDateViaBatch.bat
>f:doGetFdate.bat
08.03.2006 10:52:41
und den Dateinamen dann eben basteln wie Du es oben auch schon machst:
for /f "tokens=1-6 delims=.:" %%a in ("08.03.2006 10:52:41") do ....
...wobei dann Token 1 wieder der Tag, Token 2 der Monat.....Token 6 die Sekunden wären.
und natürlich in der FOR-/F -Klammer nicht "08.03.2006 10:52:41" im Klartext steht, sondern etwas wie
FOR /F.....%%a in ('cscript //nologo %vbstemp% datei.xyz') DO...
Biber
Moin zufi,
in der FOR /F -Anweisung hast Du die Klausel "delims=:." vergessen.
Deshalb würde ja z.B. herauskommen...
...also nur zwei Parameter als %1 ("22.03.2006") und %2 ("11:33:55") unten in der :loop ankommen.
Da hast Du aber Parameter 3 und 4, die Du voraussetzt.
Richtiger wäre also
- oder, in Deinem Batch:
[weitgehend ungetestete Skizze]
Gruß
Biber
in der FOR /F -Anweisung hast Du die Klausel "delims=:." vergessen.
Deshalb würde ja z.B. herauskommen...
(=16:33:57 D:\temp=)
>for /f "tokens=1-6" %f in ("22.03.2006 11:33:55") do @echo %f %g %h %i %j %k
22.03.2006 11:33:55
Da hast Du aber Parameter 3 und 4, die Du voraussetzt.
Richtiger wäre also
(=16:40:23 D:\temp=)
>for /f "tokens=1-6 delims=.: " %f in ("22.03.2006 11:33:55") do @echo %h-%g-%f_%i%j%k
2006-03-22_113355
::----DateTimeRenamer.bat
@Echo off
for /F "Tokens=1-6 delims=:. " %%f in ('cscript //nologo V:\FileDate.vbs V:\TestDatei.txt') do call :loop %%h-%%g-%%f_%%i%%j%%k V:\TestDatei.txt
goto :eof
:loop [2 Parameter: Par1=Dateitimestring formatiert; Par2= FQ-Dateiname]
rename %~f2 %1%~x2
::---- snapp DateTimeRenamer.bat
[weitgehend ungetestete Skizze]
Gruß
Biber
wenn man/frau zu lange auf die gleiche Stelle guckt, geht der Überblick verloren.
Der CALL-Block ist ja inzwischen überflüssig; das ganze so genannte Batchprogramm ist nur noch ein Oneliner:
-oder, wenn der Dateiname pfiffigerweise als Parameter übergeben wird (Aufruf also "DatetimeRenamerWithPar.bat V:\TestDatei.txt"):
Egal, gelöst haben wir es jetzt und etwas kürzer und eleganter kann es später immer noch werden...
Der CALL-Block ist ja inzwischen überflüssig; das ganze so genannte Batchprogramm ist nur noch ein Oneliner:
::----DateTimeRenamer.bat
@for /F "Tokens=1-6 delims=:. " %%f in ('cscript //nologo V:\FileDate.vbs V:\TestDatei.txt') do rename V:\Filedate.txt %%h-%%g-%%f_%%i%%j%%k.txt
::---- snapp DateTimeRenamer.bat
::----DateTimeRenamerWithPar.bat
@for /F "Tokens=1-6 delims=:. " %%f in ('cscript //nologo V:\FileDate.vbs %1') do rename %~f1 %%h-%%g-%%f_%%i%%j%%k%~x1
::---- snapp DateTimeRenamerWithPar.bat
Egal, gelöst haben wir es jetzt und etwas kürzer und eleganter kann es später immer noch werden...