【问题标题】:Rename multiple files by adding an incrementing number prefix通过添加递增的数字前缀重命名多个文件
【发布时间】:2015-07-10 13:49:40
【问题描述】:

这些是我的原始文件名:

AAA.pdf

密件抄送.pdf

CCC.pdf

DDD.pdf

等等……


我希望我的脚本通过添加带有递增数字的前缀来修改文件名,并在末尾保留原始文件名:

文档 1 - AAA.pdf

文档 2 - BBB.pdf

文档 3 - CCC.pdf

文档 4 - DDD.pdf

等等……

我将如何在 Powershell 上解决这个问题?


这是我迄今为止一直在尝试的:

我首先导航到文件所在的路径。

$count=1; 
dir | %{rename-item $_-newname ("Document {0} - {1}" -f $count++, $_.name)}

问题:

rename-item:无法重命名,因为“AAA.pdf-newname”处的项目不存在。

【问题讨论】:

  • 您将从 Get-ChildItem cmdlet 开始处理每个文件,并从 Rename-Item cmdlet 开始更改名称。
  • 你有没有尝试过?我会尝试 EBGreen 的建议,然后如果您遇到问题,请使用您的代码更新您的问题。非常感谢您展示了一些编码工作(如果没有预料到的话)。
  • 到底有什么问题?我看到您应该从那里的代码中删除%。它应该在那之后工作。啊...我看到这是一个待定的编辑。这取决于您当前的目录,可能容易出错。
  • 错误出现为:rename-item: Cannot rename because item at 'AAA.pdf-newname' does not exist.

标签: powershell


【解决方案1】:

我假设您遇到的“问题”是由于无法找到文件而导致的错误。您应该在循环中使用文件的完整路径。您还需要在值和参数$_-newname 之间留一个空格。

$count=1; 
dir "c:\temp" | %{rename-item $_.FullName -newname ("Document {0} - {1}" -f $count++, $_.name)}

但是您可以稍微更新此代码,使其不需要 foreach 循环或需要指定输入文件,而是直接使用管道。

$count=1; 
dir "c:\temp" | rename-item -newname {"Document {0} - {1}" -f $count++, $_.name}

【讨论】:

  • 但是如果我先导航到路径然后执行脚本,我还需要在循环中包含路径吗?
  • @Kat 不,你根本不需要它。只是一个建议。随意删除它。
【解决方案2】:

这使用了更多行,但我相信这就是您所追求的。假设文件位于“files”子目录中。

$files = Get-ChildItem "$PSScriptRoot\files"

$i = 1
foreach ($file in $files){
    $newname = "Document $i - " + $file
    Rename-Item $($file.FullName) $newname
    $i++
}

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2021-10-08
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多