Dateiname in Datum vom Vortag umwandeln

B

ByeBye 274723

Hallo

Ich betreibe seit ein paar Jahren eine Private Wetterstation und Archiviere Bilder.
Hier für müssen einige Bilder umbenannt werden.
Ich verwende seit Jahren eine Batch Datei, die eine Datei in das Aktuelle Datum ändert, die ich im Internet gefunden/bekommen habe, jedoch muss die Funktion geändert werden.
Leider habe ich keine Ahnung wie das geht.
Darum Bitte ich um Hilfe, das mir jemand eine fertige Datch Datei zur Verfügung stellt.
Wenn Heute der 2014-05-18 ist, dann muss die Datei yesterday.gif in den Vortag 2014-05-17.gif umbenannt werden. Ich habe im Internet schon gefunden, das Monats - Ende und - Anfang und ein Schaltjahr berücksicht werden muss.
mfg
Michael

Code:
set object=c:aktuell.gif

for /f "skip=5 tokens=1,4" %%a in ('dir %object%') do (
set Dateidatum=%%a
set DateinameAlt=%%b
goto loopend
)
:loopend
echo %Dateidatum%
echo %DateinameAlt%

set year=%Dateidatum:~6,4%
echo %year%

set month=%Dateidatum:~3,2%
echo %month%

set day=%Dateidatum:~0,2%
echo %day%

set appen=%year%-%month%-%day%
echo %appen%

set pre=%DateinameAlt:~0,-4%
echo %pre%

set add=%DateinameAlt:~-4%
echo %add%

set DateinameNeu=%appen%%add%
echo %DateinameNeu%

ren %DateinameAlt% %DateinameNeu%
end
 
Hallo mstut,

Batch wurde schon seit einiger Zeit durch ein viel mächtigeres Werkzeug ersetzt: PowerShell.

Beispielsweise braucht man für dein Anliegen nur 4 Zeilen Code:
Code:
$yesterday = (Get-Date).AddDays(-1)
$newFilename = $yesterday.ToString("yyyy-MM-dd")
Rename-Item "yesterday.gif" ($newFileName + ".gif")

PowerShell wird seit Windows Vista nativ mitgeliefert. Für XP, welches man sowieso nicht mehr verwenden sollte, gibt es ein Nachrüstpaket.
 
Zuletzt bearbeitet:
Hallo

Vielen Dank für die Antwort
Ich kenne weder DOS richtig noch PoweShell.
Ich habe Windows 7 im Einsatz.
Aber wie setzte ich das jetzt um?
Ich habe deinen Code in eine Batch Datei getan und gestartet, aber nichts passiert.
Was mache ich falsch?
mfg
Michael
 
PowerShell ist etwas anderes als Batch. Deswegen speichere meinen Code in eine Datei mit der Endung .ps1.

Dann mache einfach einen Rechtsklick auf die Datei innerhalb des Windows Explrorers und wähle "Mit PowerShell ausführen" aus.

Wenn es dir eine Fehlermeldung ausgibt oder nicht klappt, dann musst du zuerst die ExecutionPolicy richtig setzen.
Dazu musst du PowerShell mit Administratorrechten ausführen und dann folgenden Befehl eingeben und [Enter] drücken:
Code:
Set-ExecutionPolicy RemoteSigned
 
Hallo

Danke für die Antwort
Set-ExecutionPolicy RemoteSigned
Das hatte ich in zwischen schon gefunden
das Problem ist aber das ich mit dem Programm Z-Cron arbeite um Aktionen auszuführen und das kann nur BAT Dateien
ich habe aber den Code von sheel in eine Batch Datei geschrieben und so Funktioniert es auch
das würde mir schon reichen, aber das Fenster mit der Bach Datei schließt sich nicht von alleine, die ps1 Datei wird aber abgearbeitet
gerade habe ich noch gesehen, wenn die Datei yesterday.gif nicht existiert gibt es eine Fehlermeldung und das Fenster bleibt offen
mfg
Michael
 
Entferne die Option -noexit aus dem PowerShell-Aufruf innerhalb der Batch-Datei. (@sheel Gab es einen Grund, -noexit hier in diesem Fall zu nutzen?)

Was soll geschehen, wenn yesterday.gif noch nicht existiert?
 
Hallo

Super und vielen Dank
wenn die Datei yesterday.gif nicht existiert gibt es eine Fehlermeldung und das Fenster bleibt offen
das ist jetzt nicht mehr da, lag am -noexit
mfg
Michael
 
Naja, der Fehler aber trotzdem generiert! Du siehst ihn nur nicht, weil sich das Powershell-Fenster sofort schließt.

Ich würde es so umschreiben, da man nie weiß, ob das Ignorieren später einem das Bugsuchen erschweren wird:
Code:
$yesterday = (Get-Date).AddDays(-1)
$oldFilename = 'yesterday.gif'
$newFilename = $yesterday.ToString("yyyy-MM-dd")
if (Test-Path $oldFilename -pathType leaf) {
    Rename-Item $oldFilename ($newFileName + ".gif")
}
else {
    # Do nothing!
    # This behavior is intended.
}
 
Zuletzt bearbeitet:
Hallo

Danke
ich habe das so geändert, morgen werde ich sehen ob es funktioniert
das ganze sieht so aus wie PHP
mfg
Michael
 
Zurück