DateTime读取文件元数据时出错

问题描述 投票:1回答:1

我正在尝试编写一些PowerShell代码来对照片和其他媒体文件进行排序。文件的修改/创建日期并不总是准确的,所以我正在读取文件的元数据。这已成功完成并提取了创建日期。但我不能让PowerShell将字符串识别为日期。

我想要的是能够以这种方式将日期重新排序为年 - 月 - 日期格式:

$metaDate.ToString("yyyy-MM-dd")

但我不相信metaDate是日期类型,它是一个字符串。

所以我试图使用此代码将字符串转换为日期:

$date = [datetime]::ParseExact($metaDate,"dd/MM/yyyy HH:mm",$null)

但是它不断返回此错误:

使用“3”参数调用“ParseExact”的异常:“字符串未被识别为有效的DateTime。”

将变量写入控制台时,“看起来”日期为正常字符串:

26/‎10/‎2017 ‏‎18:23

但检查长度返回21 - 我只看到16个字符(如果你计算空间)

gettype()返回:

IsPublic IsSerial Name                                     BaseType                                                                                                      
-------- -------- ----                                     --------                                                                                                      
True     True     String                                   System.Object 

修剪没有区别

任何人都有使用PowerShell和文件元数据的想法或经验吗?这个字符串中可以隐藏字符吗?

请注意,在ParseExact命令WORKS中手动输入相同的字符串(并且长度返回16),因此对于我从文件中删除的字符串/变量有一些iffy。

非常感谢达兹

powershell datetime
1个回答
2
投票

这个字符串中可以隐藏字符吗?

实际上,存储在$metaDate中的日期字符串包含invisible control characters,即(U+200ELEFT-TO-RIGHT MARK))和(U+200FRIGHT-TO-LEFT MARK))。 使用-replace '\p{Cf}'删除它们:

 $date=[datetime]::ParseExact($metaDate -replace '\p{Cf}', 'dd/MM/yyyy HH:mm', $null)

要可视化字符串中的所有字符,请参阅this answer

© www.soinside.com 2019 - 2024. All rights reserved.