windows 使用Powershell [日期时间]::ParseExact -有趣的字符串?

4ngedf3f  于 2023-03-17  发布在  Windows
关注(0)|答案(1)|浏览(118)

下午好Powershell的巫师们!
我希望有人能向我解释我如何解决这个问题,更重要的是这个问题实际上是什么!
我正试图修复我多年前写的一个旧脚本,该脚本在文件属性中搜索几个日期,并选择一个用于重命名该文件。
我遇到的问题是,当我使用parseExact时,它无法从文件中读取日期字符串...但如果我手动将相同的字符串键入powershell,它就可以工作!
请注意,这个脚本只会在我的PC上运行,并且只需要处理我的文件格式中的日期,所以我不太担心使用$null,除非它是相关的。
请参见以下示例:

Write-Host "TEST 1"
$DateTime = [DateTime]::ParseExact("240720211515","ddMMyyyyHHmm",$null)
Write-Host $DateTime # WORKS!

Write-Host "TEST 2"
$DateTime2 = [DateTime]::ParseExact("‎24‎07‎2021‏1515","ddMMyyyyHHmm",$null)
Write-Host $DateTime2 # FAILS!

看起来一样吧?
这是一个更真实的例子,我所做的失败

$file = Get-Item "C:\SomeFolder\somefile.jpg"
$shellObject = New-Object -ComObject Shell.Application
$directoryObject = $shellObject.NameSpace( $file.Directory.FullName )
$fileObject = $directoryObject.ParseName( $file.Name )

$property = 'Date taken'
for(
    $index = 5;
    $directoryObject.GetDetailsOf( $directoryObject.Items, $index ) -ne $property;
    ++$index) { }

$photoDate = $directoryObject.GetDetailsOf($fileObject, $index)
Write-Host $photoDate # <-- This reads ‎03/‎08/‎2021 ‏‎09:15
$output = [DateTime]::ParseExact($photoDate,"dd/MM/yyyy HH:mm",$null) # <-- This fails
Write-Host $output

# If i manually type in here it works.... If I copy and paste from the Write-Host it fails...
$someInput = "03/08/2021 09:15"
$workingOutput = [DateTime]::ParseExact($someInput,"dd/MM/yyyy HH:mm",$null)
Write-Host $workingOutput
iszxjhcz

iszxjhcz1#

对于其他任何遇到这个的人来说,似乎有看不见的角色被添加了。谢谢你的现场@圣地亚哥斯夸松
这是为了我的特定目的而修复的:

$photoDate = $directoryObject.GetDetailsOf($fileObject, $index)
$utfFree = $photoDate -replace "\u200e|\u200f", ""

相关问题