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

PowerShell按各文件最后写入时间重命名tiff文件报错求助

PowerShell 按文件最后写入时间批量重命名TIFF文件方案

原有脚本错误原因

  • 第一版脚本仅在初始化时执行一次Get-Date取系统当前时间,所有文件共用同一个时间字符串作为文件名,必然触发重名报错,且取值不是文件自身的最后写入时间,不符合需求。
  • 第二版脚本直接把Get-Date命令写在普通双引号字符串中,PowerShell不会解析执行字符串内的命令,再加引号嵌套语法错误,直接触发参数绑定异常。
  • 额外注意:原测试用的时间格式串存在占位符错误:小写mm代表分钟,代表两位月份的占位符是大写MM,原输出结果中月份位置的异常数值就是占位符写错导致的。

可用脚本

基础版(无重名兜底)

替换脚本中$targetPath的值为实际目标文件夹路径即可运行:

$targetPath = "C:\blah"
Get-ChildItem -Path $targetPath -Filter *.tiff -File | ForEach-Object {
    $timeStr = $_.LastWriteTime.ToString("yyyyMMddHHmmss")
    Rename-Item -Path $_.FullName -NewName "$timeStr.tif"
}

优化版(自动处理同秒重名冲突)

如果存在同一秒内写入的多个.tiff文件,基础版会触发重名报错,优化版会自动给重名文件加递增序号后缀:

$targetPath = "C:\blah"
Get-ChildItem -Path $targetPath -Filter *.tiff -File | ForEach-Object {
    $baseTimeStr = $_.LastWriteTime.ToString("yyyyMMddHHmmss")
    $newName = "$baseTimeStr.tif"
    $index = 1
    while (Test-Path (Join-Path $targetPath $newName)) {
        $newName = "${baseTimeStr}_$index.tif"
        $index++
    }
    Rename-Item -Path $_.FullName -NewName $newName
}

关键注意点

  • Get-ChildItem后加-File参数,仅匹配文件,避免误匹配后缀为.tiff的文件夹引发错误。
  • 时间格式占位符严格区分大小写,不要把月份MM错写为分钟mm。
  • 如果要在字符串内直接执行表达式取值,必须用$()子表达式包裹,例如内联写法为"$($_.LastWriteTime.ToString('yyyyMMddHHmmss')).tif",直接把命令写在字符串里不会被执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:27:39