You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Robocopy是否有可提取路径超260字符文件时间戳的开关?

解决方案

方案1:最小改动修复现有代码

你之前[System.IO.FileInfo]返回无效日期的核心原因是没有给长路径加\\?\前缀,和你调用Get-FileHash、Get-Content的逻辑一致,给路径加上前缀即可正常读取属性:
把原来的两行属性获取代码:

LastWriteTime = ([System.IO.FileInfo] $matches.FullName).LastWriteTime
Created = ([System.IO.FileInfo] $matches.FullName).creationtime

替换为:

LastWriteTime = ([System.IO.FileInfo] "\\?\$($matches.FullName)").LastWriteTime
Created = ([System.IO.FileInfo] "\\?\$($matches.FullName)").CreationTime

该方案不需要修改其他现有逻辑,直接替换即可解决长路径下时间戳读取异常的问题。

方案2:用robocopy /TS直接提取时间戳(执行效率更高)

你之前加了/TS开关后报错,是因为原有正则表达式没有匹配新增的时间戳字段。开启/TS后robocopy的输出行格式为[上次修改时间] [文件大小] [完整路径],对应修改匹配规则即可:

  1. 确认robocopy参数中的/TS开关已保留
  2. 把原有的匹配规则:
If ($_.Trim() -match "^(?<Children>\d+)\s(?<FullName>.*)")

替换为适配带时间戳输出的正则:

If ($_.Trim() -match "^(?<Date>\d{4}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2})\s+(?<Size>\d+)\s+(?<FullName>.*)")
  1. 直接从匹配结果中转换时间即可,不需要额外查询文件属性:
LastWriteTime = [datetime]::ParseExact($matches.Date, "yyyy/MM/dd HH:mm:ss", $null)

该方案复用robocopy的输出结果,不需要额外调用接口查询文件属性,文件量大时执行效率明显更高。如果需要提取创建时间,给robocopy再加/TC开关,对应修改正则规则即可。

注意事项

每次执行脚本前清空c:\temp\test.txt的内容,避免旧日志干扰匹配结果。

内容的提问来源于stack exchange,提问作者oymonk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:45:03