使用Powershell如何以递归方式批量重命名文件并在新名称中包含计数器?

使用Powershell如何以递归方式批量重命名文件并在新名称中包含计数器?,powershell,Powershell,我有一个项目,我需要在包含特定字符串的多个子文件夹中搜索多个PDF,然后使用计数器变量重命名它们。我是一个非常新手的powershell用户,但我想我已经非常接近了。唯一不起作用的是计数器。计数器变量永远不会改变。这是我到目前为止对代码的了解: $prefix = "sample" $id = 1 Get-ChildItem -Filter "*combined*" -Recurse | Rename-Item -NewName ($prefix + ($id.tostring("000"))

我有一个项目,我需要在包含特定字符串的多个子文件夹中搜索多个PDF,然后使用计数器变量重命名它们。我是一个非常新手的powershell用户,但我想我已经非常接近了。唯一不起作用的是计数器。计数器变量永远不会改变。这是我到目前为止对代码的了解:

$prefix = "sample"
$id = 1
Get-ChildItem -Filter "*combined*" -Recurse | Rename-Item -NewName ($prefix + ($id.tostring("000")) + '_regular_' + ($id.tostring("000")) + '.pdf' -f $id++ )

我错过了什么?我应该使用“foreach”循环吗?

是的,您需要使用
foreach
循环。这将完成并进行重命名,确保在重命名后子目录中找到的任何文件都保留在这些目录中

Get ChildItem-Filter“*combined*”-Recurse |%{
$fullId=$id.toString(“000”)
$curPath=Split Path$\ux.FullName
重命名项$\u0.fullname-NewName“$curPath\$($prefix)$($fullId)\($fullId.pdf”)
$id+=1
}

以下是我对上述代码的编辑版本:

$id = 1
Get-ChildItem -Filter "*combined*" -Recurse | %{ 
  $fullId = $id.toString("000")
  $curPath = Split-Path $_.FullName
  Rename-Item $_.fullname -NewName "$curPath\$($prefix)_$($fullId)_regular_$($fullId).pdf"
  $id++
}

谢谢这主要起到了作用,但我认为变量$id需要更早声明。否则,第一次通过循环时,它返回为“null”。呃,是的,这一位有点明显,注意我也省略了
$prefix
,因为在您的示例中,您已经定义了它,并且
$id
在您遇到堆栈溢出问题之前,您应该做的是向上投票您认为有用的答案。如果您仍然有问题,您应该对突出显示在何处的问题进行编辑。使用我写的代码并在其中添加一行以回答您自己的问题并不是使用该网站的正确方式!阅读