首页 > 解决方案 > PowerShell 脚本使用日期和月份批量重命名文件

问题描述

有谁知道我可以如何更改以下 PowerShell 脚本以包括月份和年份:

Get-ChildItem *.mp4 | Rename-Item -newname {“SONYA7 - “ + $_.LastWriteTime.toString("yyyy-MM-dd - HH-mm-ss") + ".mp4"}

例如上面的脚本将产生:

SONY7 - 2020-05-01 - 15-50-35.mp4

但我需要它来生产:

SONY7 - 2020-05-01(2020 年 5 月).mp4

这可能是一个非常简单的修复,但我尝试了几种不同的方法,但我得到的只是错误消息。非常感谢您的帮助。

标签: powershell

解决方案


继续我的评论

如果您想要名为 的文件SONYA7 - 2020-05-01 (May 2020).mp4,请使用$_.LastWriteTime.toString("yyyy-MM-dd (MMM yyyy)").

但是,正如您所注意到的,这将导致名称冲突,在同一天修改的文件将获得相同的文件名。为了克服这个问题,您还需要保留文件时间部分。

也许格式"yyyy-MM-dd (MMM yyyy HH-mm-ss)"会是更好的选择,尽管它确实会创建长文件名..

然后,这里也有一个问题需要考虑:
当使用类似Get-ChildItem *.mp4 | Rename-Item ...的代码时,Get-ChildItem cmdlet 也会拾取已经重命名的文件,多次执行该操作。

要阻止它迭代已重命名的文件,要么

  • 首先在变量中捕获来自 Get-ChildItem 的文件集合并循环遍历该OR
  • 用括号包围 Get-ChildItem 部分,以便在通过管道发送项目之前完成
(Get-ChildItem -Filter '*.mp4' -File) | 
 Rename-Item -NewName { 'SONYA7 - {0:yyyy-MM-dd (MMM yyyy HH-mm-ss)}.mp4' -f $_.LastWriteTime }

推荐阅读