damnedfreak
Goto Top

Per Batch Datum in anderem Format an Dateinamen anfügen

Guten Morgen,

eventuell kann mir hier ja jemand weiterhelfen. Und zwar habe ich folgendes Problem:

Ich habe in einem bestimmten Ordner immer 3 gleich benannte Dateien (ApShell.abf/RL_Kons_VER_VL.abf/RLPV_Produktvorhaben.abf im Ordner G:\Backups). Dieses sind Analysis Services Backups, welche jede Nacht geschrieben werden. Um nun mehrere Generationen gleichzeitig im Laufwerk haben zu können, möchte ich an den Backupjob nun einen weiteren Step anhängen (in Form eines cmd-files), welcher die 3 Dateien umbenennt und das aktuelle Datum (im Format 2012_08_27_013757 oder ohne Unterstriche, ist eig. egal) anfügt. Problem hierbei ist, dass die Systemzeit englisch ist, sprich ein %date% 08/29/2012 zurückgibt.

Bisher habe ich folgendes zusammensuchen können (am Beispiel eines Backups):

@echo off
for /f "tokens=*" %%a in (  
'dir /b G:\Backups\OLAP\Apshell.abf'  
) do call :rename "%%a"  
goto :EOF
:rename
set timestamp=%date%
set oldname=%~1
set newname=%oldname%_%timestamp%.abf
echo ren "G:\Backups\OLAP\%oldname%" "%newname%"  
pause

Was folgendes zurückgibt:

ren "G:\Backups\OLAP\ApShell.abf" "ApShell.abf_Wed 08/29/2012.abf"  
Press any key to continue . . .


Entspricht leider nicht wirklich dem, was ich haben will. Leider bin ich nun aber komplett überfragt, wie ich das Problem lösen kann (um auch das .abf mittendrin zu entfernen), da die Suche per Google mich nicht mehr weiterbringt.

Vielen Dank schonmal im voraus!!

Content-Key: 190359

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

Printed on: April 23, 2024 at 14:04 o'clock

Member: bastla
bastla Aug 29, 2012 at 07:51:13 (UTC)
Goto Top
Hallo Damnedfreak!

Es sollte ja genügen, das Datum (lt Deinem Beispiel wäre das "Wed 08/29/2012") per "for"-Schleife zu zerlegen und dann passend zusammenzusetzen:
for /f "tokens=1-4 delims=/ " %%a in ("%date%") do set "WoTag=%%a" & set "Mon=%%b" & set "Tag=%%c" & set "Jahr=%%d"  
echo %Jahr%-%Mon%-%Tag%
Grüße
bastla
Member: Damnedfreak
Damnedfreak Aug 29, 2012 at 08:06:19 (UTC)
Goto Top
Hallo bastla,

vielen Dank für Deine Antwort! Das funktioniert schonmal super, vielen Dank schonmal dafür!

Nun müsste nur noch das eine ".abf" im Dateinamen raus, das zuviel ist. Die Stunden+Minutenangabe ohne Doppelpunkt aus dem %time% kriege ich denke ich noch selbst zum Dateinamen hinzu, das wäre hier auch zu viel zu verlangen face-smile

Grüße
freaky
Member: bastla
bastla Aug 29, 2012 at 08:57:40 (UTC)
Goto Top
Hallo Damnedfreak!

Du kannst in Deinem Unterprogramm den Dateinamen mit "%~n1" erhalten, den Typ mit "%~x1" ...

Grüße
bastla
Member: Damnedfreak
Damnedfreak Aug 29, 2012 at 10:19:17 (UTC)
Goto Top
Vielen vielen Dank bastla!

Mit meinem Script

@echo off
for /f "tokens=1-4 delims=/ " %%a in ("%date%") do set "WoTag=%%a" & set "Mon=%%b" & set "Tag=%%c" & set "Jahr=%%d"  
for /f "tokens=*" %%a in ('dir /b G:\Backups\OLAP\ApShell.abf,G:\Backups\OLAP\RL_Kons_VER_VL.abf,G:\Backups\OLAP\RLPV_Produktvorhaben.abf') do call :rename "%%a"  
goto :EOF
:rename
set oldname=%~n1
set newname=%oldname%_%Jahr%%Mon%%Tag%.abf
ren "G:\Backups\OLAP\%oldname%" "%newname%"  

bekomme ich nun den gewünschten Output! Das mit Std+Min ist ja nur noch ne Kleinigkeit! face-smile

Vielen Dank nochmal,
einen schönen Tag noch!
Member: Damnedfreak
Damnedfreak Aug 30, 2012 at 07:37:19 (UTC)
Goto Top
Kleines Update, bin in nem andern Forum noch fündig geworden bezüglich Timestamp, was alles vereint face-smile

@echo off
wmic path win32_localtime get dayofweek,day,month,year,hour,minute,second>"aktuellesdatum.txt"  
for /f "skip=1 tokens=1,2,3,4,5,6,7" %%a in ('type "aktuellesdatum.txt"') do set tag=%%a&set wochentag=%%b&set stunde=%%c&set minute=%%d&set monat=%%e& set jahr=%%g  

if %tag% lss 10 set tag=0%tag%
if %monat% lss 10 set monat=0%monat%
if %jahr% lss 10 set jahr=0%jahr%
if %stunde% lss 10 set stunde=0%stunde%
if %minute% lss 10 set minute=0%minute%
 
for /f "tokens=*" %%a in ( 'dir /b G:\Backups\OLAP\ApShell.abf,G:\Backups\OLAP\RL_Kons_VER_VL.abf,G:\Backups\OLAP\RLPV_Produktvorhaben.abf' ) do call :rename "%%a"  
goto :EOF 
:rename 
set oldname=%~n1
set newname=%oldname%_%jahr%%monat%%tag%%stunde%%minute%.abf
ren "G:\Backups\OLAP\%oldname%".abf "%newname%"  
Member: bastla
bastla Aug 30, 2012 updated at 08:15:10 (UTC)
Goto Top
Hallo Damnedfreak!
... in nem andern Forum ...
Das wäre ja nun nicht nötig gewesen face-wink (zB DOS-Batch mit Date- Funktion) - ich dachte, Du wolltest das auf Basis der Datumszerlegung selbst herausfinden ...

Grüße
bastla