我正在尝试编写一些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),所以对于要从文件中删除的字符串/变量有些疑问。
非常感谢 达兹
答案 0 :(得分:2)
此字符串中可以有隐藏的字符吗?
实际上,您存储在$metaDate
中的日期字符串包含invisible control characters,即({U+200E
(LEFT-TO-RIGHT MARK))和(U+200F
(RIGHT-TO-LEFT MARK ))。
使用-replace '\p{Cf}'
删除它们:
$date=[datetime]::ParseExact($metaDate -replace '\p{Cf}', 'dd/MM/yyyy HH:mm', $null)
要显示字符串中的所有字符,请参见this answer。