【问题标题】:Rename a sequence of files to a new sequence, keeping the suffix将文件序列重命名为新序列,保留后缀
【发布时间】:2022-01-14 22:27:36
【问题描述】:

我需要帮助才能在 PowerShell 中创建一个命令来重命名具有这种格式的文件序列:

001.jpg
001_1.jpg
002.jpg
002_1.jpg
003.jpg
003_1.jpg

进入一个新序列,该序列可以以 9612449 等数字开头,但后缀保持不变,因此新序列为:

9612449.jpg
9612449_1.jpg
9612450.jpg
9612450_1.jpg
9612451.jpg
9612451_1.jpg

【问题讨论】:

  • 请告诉我们您已经自己尝试过什么。还要添加您可能遇到的任何错误消息。这个平台旨在帮助人们编写代码..
  • 请注意,本网站不是免费的代码/脚本编写服务!请拨打tour,访问help center 并阅读How to Ask!一旦您自己尝试了某件事但失败了,请回到这里,edit 您的帖子并提供您的编码尝试minimal reproducible example
  • 得到了它,并道歉......我不是一个真正的编码器/程序员。实际上我经营一家拍卖公司,我必须按顺序提供照片才能上传到拍卖平台,由第三方拥有。该平台更改了软件,现在不再使用批号,而是要求所有照片都以项目 ID 号命名。哦,好吧...我会试着弄清楚一些事情,然后回复你们
  • 展示自己的努力总是更可取的。也就是说,即使没有这样的问题,对我来说,如果一个问题定义明确并且需要其他人可能感兴趣的解决方案,那么它也是值得回答的。请注意,除非您 @-提及特定用户(一次只能为一个用户这样做),否则他们不会收到后续 cmets 的通知。

标签: powershell rename


【解决方案1】:

假设9612449 是要添加到构成第一个_ 分隔标记或所有基本文件名的现有数字的偏移量

# Simulate a set of input files.
$files = [System.IO.FileInfo[]] (
  '001.jpg',
  '001_1.jpg',
  '002.jpg',
  '002_1.jpg',
  '003.jpg',
  '003_1.jpg'
)

# The number to offset the existing numbers by.
$offset = 9612449 - 1

# Process each file and apply the offset.
$files | ForEach-Object {
  # Split the base name into the number and the suffix.
  $num, $suffix = $_.BaseName -split '(?=_)', 2
  # Construct and output the new name, with the offset applied.
  '{0}{1}{2}' -f ($offset + $num), $suffix, $_.Extension
}

以上产生了您的问题中显示的输出。


应用于真正的文件重命名操作,您会执行以下操作:

Get-ChildItem -LiteralPath . -Filter *.jpg | 
  Rename-Item -NewName { 
    $num, $suffix = $_.BaseName -split '(?=_)', 2
    '{0}{1}{2}' -f ($offset + $num), $suffix, $_.Extension
  } -WhatIf

注意:上面命令中的-WhatIf common parameter预览操作。一旦您确定该操作会执行您想要的操作,请删除 -WhatIf

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 2020-08-31
    • 2021-06-13
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多