예전 VHS 테이프를 디지털화했는데 이제는 꽤 많은 개별 파일이 되었습니다. 파일 날짜를 이벤트의 '원래' 날짜로 설정하여 연대순으로 정렬하고 싶습니다.
CreationTime
이 작업은 PowerShell에서 및 을 사용하여 수행할 수 있지만 LastWriteTime
이해가 되지 않는 부분이 있습니다. 내 시스템 날짜 형식은 유럽식이므로 DD-MM-YYYY이지만 CreationTime
미국 날짜 형식만 허용하므로 MM/DD/YYYY도 마찬가지입니다 LastWriteTime
. 아래 코드를 참조하세요. PS v4.0 btw입니다.
# 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'
반대 날짜 형식을 사용하는 CreationTime
것 같나요 ? Get-Date
이것 뒤에 몇 가지 논리가 있습니까, 아니면 뭔가 빠졌습니까?
답변1
지금 하려는 작업은 문자열(날짜)을 객체 datetime
( CreationTime
속성) 에 직접 캐스팅하는 것입니다.
문자열을 로 캐스팅하는 경우 datetime
en-US Culture 또는 ISO 8601 형식(일본 날짜/시간 형식이라고도 함)의 두 가지 형식만 사용할 수 있습니다. 이에 대한 자세한 내용은 여기를 참조하세요.https://stackoverflow.com/questions/14359053/why-does-powershell-always-use-us-culture-when-casting-to-datetime
이제 세 가지 옵션이 있습니다.
- ISO 형식 사용:
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "1998-12-31"
- en-US 사용:
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "12/31/1998"
- 구문 분석:
(gci oud_en_nieuw_beijum.mpg).CreationTime = ([datetime]::Parse("31.12.1998"))
그렇게 하면 parse()
PowerShell은 문자열을 현지 문화 정보로 구문 분석하여 "유럽 형식"을 처리할 수 있습니다.
현지 문화와 다른 문화 정보를 구문 분석하려면 개체를 만들고 [cultureinfo]
날짜를 구문 분석하면 됩니다. 예:
$dateString = '10.12.2018'
$frenchCulture = [cultureinfo]::GetCultureInfo('fr-FR')
# Parsing with French Culture
[datetime]::Parse($dateString, $frenchCulture)
답변2
나는 (Get-Item Filename.extension).CreationTime=("6 October 2020 17:47:22") 을 사용했는데 완전히 작동했습니다.
LastWriteTime 및 LastAccessTime에 사용하는 경우에도 마찬가지입니다.