molly11
Goto Top

Powershell Variable mit führender 0 im Monat - Tag - Stunde

Hallo zusammen,

ich bin neu hier und will mich kurz vorstellen- face-big-smile

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

Content-Key: 563509

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

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: 143728
143728 07.04.2020 aktualisiert um 15:12:23 Uhr
Goto Top
Da gibt es viele Möglichkeiten, z.B.
$_.LastWriteTime.toString("yyyyMMdd_HHmmss")  
https://docs.microsoft.com/de-de/dotnet/api/system.datetime.tostring?vie ...

Oder mit padLeft
$_.LastWriteTime.Month.toString().PadLeft(2,'0')  


oder mit dem Format Operator -f
'{0:dd}_{0:MM}_{0:yyyy}' -f $_.LastWriteTime  
usw.

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 ...
Mitglied: Molly11
Molly11 08.04.2020 um 12:56:39 Uhr
Goto Top
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.

"{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?

Danke.
Mitglied: 143728
Lösung 143728 08.04.2020 aktualisiert um 13:01:40 Uhr
Goto Top
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!
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?
Da ist nix verflogen du musst es natürlich als Variable speichern wenn du es nicht nur ausgeben willst face-smile
Der -F Operator ändert die Variable nicht das musst du schon selbst machen...
$var = "{0:d4}" -f $ydate   
$var
Mitglied: Molly11
Molly11 08.04.2020 um 15:51:59 Uhr
Goto Top
Ja kruzifix.....

Das hatte ich heute morgen ewig versucht und immer einen Fehlerwert oder keine Ausgabe in der Hinsicht bekommen.

Da Du mir meine Annahme hier bestätigt hast, habe ich nochmal versucht und es funkt.

$ydate = "{0:d4}" -f $ydate
$mdate = "{0:d2}" -f $mdate
$ddate = "{0:d2}" -f $ddate
$hdate = "{0:d2}" -f $hdate


Die Ordnernamen werden jetzt korrekt angezeigt.
Ich nehme an, das die Auswahl im Get-ChildItem der Auslöser ist.

Hatte heute morgen ohne Expand hantiert, um die DateTime Variable zu vereinfachen.

Select-Object -last 1 -ExpandProperty LastWriteTime

Aber jetzt geht.

Vielen Dank cabrinha!