Powershell 重命名带有附加编号的相机图片和视频

Powershell Renaming Camera Pics & Vids with Appended number

提问人:SPJLee 提问时间:11/16/2023 更新时间:11/16/2023 访问量:30

问:

我尝试在Powershell中制作一个快速脚本,以使用首选命名约定重命名文件夹中的相机图片和视频:

(上次写入时间 (yyyyMMdd_HHmmss_) + (文件编号) + (文件扩展名)

Set-Location $PSScriptRoot

$inc_pics = "*.jpg","*.png","*.bmp","*.jpeg","*.heic"
$inc_vids = "*.mp4","*.avi","*.mpg","*.mpeg","*.mov"

$included = $inc_pics+$inc_vids

$files = Get-ChildItem -Path .\* -File -Include $included


$files


$x=1

if ($files.Count -gt 99)

    {

    $d = "{0:D3}"

    }

    else 

        {

        $d = "{0:D2}"

        }

cls
Write-Host "`n---------------------"
Write-Host "-- Renaming files: --"
Write-Host "---------------------`n`n"

foreach ($file in $files)

{

  $newname = ( "{0}{1}{2}" -f $file.LastWriteTime.ToString('yyyyMMdd_HHmmss_'),($d -f ($x)), $file.Extension )

  Rename-Item -Path $file.FullName -NewName $newname
  
  Write-Host `t $file.Name -ForegroundColor Yellow -nonewline ; Write-Host "   is now   " -ForegroundColor White -nonewline; Write-Host $newname -ForegroundColor Green -nonewline ;
  Write-Host `n

  $x++
 
}


Read-Host "`nPress Enter to continue"

sleep 1 

基本脚本有效,但 number 的附加在 test 目录中不太正确。例如,我期待:

20171210_162727_01.jpg

20171210_162728_02.jpg

20171210_162729_03.mp4

20171210_162730_04.mp4

20171210_162731_05.jpg

但是我得到:

20171210_162727_01.jpg

20171210_162728_02.jpg

20171210_162729_04.mp4

20171210_162730_05.mp4

20171210_162731_03.jpg

这可能是显而易见的,但我没有看到是什么原因造成的。目录之间似乎没有模式,但是如果在还原的目录上重复多次,结果总是相同的

这样做主要是为了防止重复的文件名(在一秒钟内拍摄多张照片,我想另一种方法是在末尾添加 (1)、(2)(我的手机对普通项目这样做,对连拍照片这样做 001,002 等)

PowerShell 脚本

评论


答:

0赞 mklement0 11/16/2023 #1

看起来您的意图是根据文件上次写入时间戳所隐含的时间顺序来设置序列号。

因此,请替换:

foreach ($file in $files)

跟:

foreach ($file in $files | Sort-Object LastWriteTime)

也就是说,使用 Sort-Object Get-ChildItem 发出的文件信息对象 (System.IO.FileInfo) 按其 .LastWriteTime 属性值。

评论

1赞 SPJLee 11/16/2023
就这么简单!我想知道它把它们放在什么顺序上,效果很好,谢谢