使用顺序数字后缀在PowerShell中批量重命名文件

Bro*_*oke 11 powershell

我在这个网站上找到了关于在Powershell中重命名文件的几个答案,所以如果这是重复的话我很抱歉.我花了5个小时在谷歌和各种网站试图解决这个问题.我真的试图解释这个.我不是一个程序员,只是一个对他们的归档一丝不苟的人.

我有14,000张图片按年份和月份分类到文件中,但是使用多台摄像机拍摄,我希望文件名能反映拍摄日期.例如,1998年10月16日的图片位于名为1998\10 October\19981016的文件夹中.我希望所有的图片都被命名为19981016_0001 19981016_0002等.我尝试了多个建议,但它没有奏效.可能是因为我缺乏程序员的知识哈哈.有人可以帮助我,并给我虚拟指示吗?我可以到达它列出我想要更改的文件夹但我无法实际更改它的位置.我所有的照片都是.jpg.我试图附上我所做的截图,但不幸的是我不能,因为我太新了.提前致谢!

我创建了一个副本的临时文件,以防我搞砸了.我开始通过键入cd "C:\Documents and Settings\Brooke LastName\Desktop\Temp"然后成功获取我的文件加载后我使用了我在这个论坛上找到的公式.

ls *jpg | Foreach {$i=1} {Rename-Item _ -NewName ("$($.19981016){0:00000000#} .jpg" -f $i++) -whatif}
Run Code Online (Sandbox Code Playgroud)

我说错了

Unexpected token ' .19981016' in expression or statement.

At line:1 char:12 + $.19981016 <<<<
Run Code Online (Sandbox Code Playgroud)

该错误重复了几次.

我在网上找到了几个公式,但大多数创建的文件用括号括起来,例如vacation(1).jpg.我希望在我约会结束时使用下划线后的四位数计数器,例如19981016_0001

Adi*_*bar 33

语法很接近.一些问题:

  • 我不确定$($.19981016)要生成什么,但是$()计算括号中的表达式并将结果插入到字符串中,并且因为$.19981016不是有效的表达式而得到错误.将对目录中的每个.jpg文件重复该错误.
  • {0:00000000#}在格式化的字符串中将创建一个零填充的9位数字,但更简单的方法是{0:D9}.但是,我认为你想要零填充数字有4位数,所以应该是{0:0000#}{0:D4}.
  • 我不确定Foreach {$i=1} { [...]应该做什么.关键字foreach可以表示foreach循环,也可以是Foreach-Object的简写.在这种情况下,从管道接收输入,它必然是后者,但这种语法不正确.

如果我理解正确的描述,这将做你想要的:

$i = 1
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('19981016_{0:D4}.jpg' -f $i++)}
Run Code Online (Sandbox Code Playgroud)

文件名为19981016_0001.jpg,19981016_0002.jpg,19981016_0003.jpg等.

几点说明:

  • 你说你想要像19981016_0001这样的文件名,但我假设你想保留.jpg的扩展名.
  • 您需要初始化$ i,否则它将从0开始,如果尚未定义,或者更糟糕的是,如果$ i之前在同一个PowerShell会话中使用过,则从其他数字开始.例如,如果目录中有1,432个.jpg文件,并且首先使用-WhatIf运行命令,然后将其运行为实际,则数字将从1432开始.
  • $ I ++递增$ I 1.但是,如果你使用它作为一种价值,它增加的值被读出; 这就是为什么如果$ i未定义,它将从0开始.
  • Get-ChildItemls相同.我使用了本机PowerShell名称,但它们是可互换的(ls,dirgci都是Get-ChildItem的别名).
  • %{}Foreach-Object的简写