# Dateiname in Datum vom Vortag umwandeln



## mstut (18. Mai 2014)

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


```
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
```


----------



## ComFreek (18. Mai 2014)

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:

```
$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.


----------



## mstut (18. Mai 2014)

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


----------



## sheel (18. Mai 2014)

Siehe erste Antwort hier: http://stackoverflow.com/questions/2035193/how-to-run-a-powershell-script
zB. Aus CMD/Batchdteien heraus

```
powershell -noexit "& "C:\ordner\datei.ps1"
```

Und Batchdateien auf Widnows 7 haben absolut gar nichts mit DOS zu tun.


----------



## ComFreek (18. Mai 2014)

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:

```
Set-ExecutionPolicy RemoteSigned
```


----------



## mstut (18. Mai 2014)

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


----------



## ComFreek (18. Mai 2014)

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?


----------



## mstut (18. Mai 2014)

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_


----------



## ComFreek (18. Mai 2014)

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:

```
$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.
}
```


----------



## mstut (18. Mai 2014)

Hallo

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


----------



## sheel (18. Mai 2014)

@ComFreek, wegen noexit: Kein Grund, nur stupides Copy&Paste


----------

