Powershell Variable mit führender 0 im Monat - Tag - Stunde
Hallo zusammen,
ich bin neu hier und will mich kurz vorstellen-
Meine neue Tätiigkeit bezieht sich auf alles in der Netz - , / Server Landschaft.
Da ich C Programierung noch nachträglich studiert habe, kann ich die Beschreibungen und den Code einigermaßen nachvollziehen im PS. Bin noch neu im PS.
Hier ist mein Problem, welches wahrscheinlich Peanut ist.
Ich hole mir aus der Eigenschaft LastTimeWrite das letzte Datum / Erstellungsdatum (wird nicht wieder angepackt) der zu kopierenden Datei heraus.
Dieses setze ich weiter aufgeteilt als Variable zur Ordnererstellung ein.
$wdate = "LastWriteTime"
$ydate = $wdate.year
$modate = $wdate.month
$ddate = $wdate.day
$hdate = $wdate.hour
Das funktioniert auch super. Sogar die neuen Ordner werden angelegt.
Allerdings benötige ich die Variablen in dem Ordnernamen mit führender 0. Und das will nicht hinhauen.
Versuche mit -uformat oder StartLeft (x,"x") scheitern .
Die Variablen oben werden auch direkt als Ordnernamen gesetzt. Aber halt nur einstellig bei den Monaten Jan.Sept. z. Bsp.
Da ich hier nicht mit der Systemzeit ( Get-Date ) arbeite, scheinen die angegebenen Funktionen zur Ziffernanzahl und Format nicht zu greifen.
Vielen Dank für die eintreffende Hilfe diesbezüglich.
Bitte bleibt gesund.
Gruß
Markus
ich bin neu hier und will mich kurz vorstellen-
Meine neue Tätiigkeit bezieht sich auf alles in der Netz - , / Server Landschaft.
Da ich C Programierung noch nachträglich studiert habe, kann ich die Beschreibungen und den Code einigermaßen nachvollziehen im PS. Bin noch neu im PS.
Hier ist mein Problem, welches wahrscheinlich Peanut ist.
Ich hole mir aus der Eigenschaft LastTimeWrite das letzte Datum / Erstellungsdatum (wird nicht wieder angepackt) der zu kopierenden Datei heraus.
Dieses setze ich weiter aufgeteilt als Variable zur Ordnererstellung ein.
$wdate = "LastWriteTime"
$ydate = $wdate.year
$modate = $wdate.month
$ddate = $wdate.day
$hdate = $wdate.hour
Das funktioniert auch super. Sogar die neuen Ordner werden angelegt.
Allerdings benötige ich die Variablen in dem Ordnernamen mit führender 0. Und das will nicht hinhauen.
Versuche mit -uformat oder StartLeft (x,"x") scheitern .
Die Variablen oben werden auch direkt als Ordnernamen gesetzt. Aber halt nur einstellig bei den Monaten Jan.Sept. z. Bsp.
Da ich hier nicht mit der Systemzeit ( Get-Date ) arbeite, scheinen die angegebenen Funktionen zur Ziffernanzahl und Format nicht zu greifen.
Vielen Dank für die eintreffende Hilfe diesbezüglich.
Bitte bleibt gesund.
Gruß
Markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 563509
Url: https://administrator.de/contentid/563509
Ausgedruckt am: 19.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
Da gibt es viele Möglichkeiten, z.B.
https://docs.microsoft.com/de-de/dotnet/api/system.datetime.tostring?vie ...
Oder mit padLeft
oder mit dem Format Operator -f
usw.
https://docs.microsoft.com/de-de/dotnet/api/system.datetime?view=netfram ...
$_.LastWriteTime.toString("yyyyMMdd_HHmmss")
Oder mit padLeft
$_.LastWriteTime.Month.toString().PadLeft(2,'0')
oder mit dem Format Operator -f
'{0:dd}_{0:MM}_{0:yyyy}' -f $_.LastWriteTime
Da ich hier nicht mit der Systemzeit ( Get-Date ) arbeite, scheinen die angegebenen Funktionen zur Ziffernanzahl und Format nicht zu greifen.
Das sind alles DateTime Strukturen aus dem .NET Framework macht keinen Unterschied ...https://docs.microsoft.com/de-de/dotnet/api/system.datetime?view=netfram ...
Zitat von @Molly11:
Danke für die Gedankenanstöße und die Links.
Bei der Lösung mit dem -f Operator sehe ich im Moment noch die smarteste Lösung.
Naja, kommt immer auf den Zweck an die anderen funktionieren ebenfalls alle einwandfrei!Danke für die Gedankenanstöße und die Links.
Bei der Lösung mit dem -f Operator sehe ich im Moment noch die smarteste Lösung.
Die oben genannten Variablen werden auch 2stellig mit führender 0 ausgegeben. Allerdings nur auf dem Display / Console.
Nö, das ganze wird ja in Strings umgewandelt, wenn du die Umwandlung nicht speicherst ist klar das es nur auf der Konsole ausgegeben wird."{0:d4}" -f $ydate
"{0:d2}" -f $mdate
"{0:d2}" -f $ddate
"{0:d2}" -f $hdate
ergibt
2020
04
07
17
Jedoch sind dann anscheinend die Werte wieder verflogen, wenn diese angezeigt wurden. Oder kann ich die Ausgabewerte wieder in eine Variable setzen?
Der -F Operator ändert die Variable nicht das musst du schon selbst machen...
$var = "{0:d4}" -f $ydate
$var