Ich habe meine alten VHS-Kassetten digitalisiert und es sind nun ziemlich viele einzelne Dateien. Ich möchte die Dateidaten auf die „ursprünglichen“ Daten der Ereignisse setzen, damit ich sie chronologisch sortieren kann.
CreationTime
Dies kann mit PowerShell mithilfe von und erfolgen LastWriteTime
, aber es gibt etwas, das ich nicht verstehe. Mein Systemdatumsformat ist europäisch, also TT-MM-JJJJ, CreationTime
akzeptiert aber nur das US-Datumsformat, also MM/TT/JJJJ (dasselbe gilt für LastWriteTime
). Siehe Code unten, es ist übrigens PS v4.0.
# This gives error message: Cannot convert value "31-12-1998" to type "System.DateTime"
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = '31-12-1998'
# This works correctly
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = '12/31/1998'
# This gives error message: Cannot convert value "12/31/1998" to type "System.DateTime"
Get-Date -Date '12/31/1998'
# This works correctly
Get-Date -Date '31-12-1998'
Es scheint, dass die entgegengesetzten Datumsformate verwendet werden? Steckt dahinter eine Logik oder übersehe ich etwas CreationTime
?Get-Date
Antwort1
Was Sie jetzt versuchen, ist, eine Zeichenfolge (das Datum) direkt in ein datetime
Objekt (die CreationTime
Eigenschaft) umzuwandeln.
Wenn Sie einen String in umwandeln datetime
, können Sie nur zwei Formate verwenden: das en-US-Kulturformat oder das ISO 8601-Format (auch bekannt als japanisches Datums-/Uhrzeitformat). Weitere Informationen hierzu finden Sie hier:https://stackoverflow.com/questions/14359053/warum verwendet Powershell immer eine US-Kultur, wenn es um das Casting auf Datetime geht?
Sie haben jetzt drei Möglichkeiten:
- ISO-Format verwenden:
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "1998-12-31"
- Verwenden Sie en-US:
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "12/31/1998"
- Analysieren:
(gci oud_en_nieuw_beijum.mpg).CreationTime = ([datetime]::Parse("31.12.1998"))
Wenn Sie parse()
dies tun, analysiert PowerShell die Zeichenfolge mit den Informationen zu Ihrer lokalen Kultur, sodass das „europäische Format“ verarbeitet werden kann.
Wenn Sie Kulturinformationen analysieren möchten, die sich von Ihrer lokalen Kultur unterscheiden, können Sie einfach ein [cultureinfo]
Objekt erstellen und das Datum analysieren. Beispiel:
$dateString = '10.12.2018'
$frenchCulture = [cultureinfo]::GetCultureInfo('fr-FR')
# Parsing with French Culture
[datetime]::Parse($dateString, $frenchCulture)
Antwort2
Ich habe (Get-Item Filename.extension).CreationTime=("6. Oktober 2020 17:47:22") verwendet und es funktioniert einwandfrei.
Dasselbe gilt, wenn Sie es für LastWriteTime und LastAccessTime verwenden.