按顺序递归重命名所有子文件夹中的文件
Recursively Rename Files In All Subfolders Sequentially
我有一系列文件夹和子文件夹,结构如下:
- 001/Fabric/Blue/(.jpg 文件,按顺序命名)
- 001/Fabric/Green/(.jpg 文件,按顺序命名)
- 002/Fabric/Blue/(.jpg文件,按顺序命名)
- 002/Fabric/Green/(.jpg文件,按顺序命名)
- 等等
我想删除文件名中多余的字符串字符,我想将它们的文件名转换为更简单的顺序格式(0.jpg、1.jpg 等)。
我尝试使用几个不同的 PowerShell 示例来实现它。我有递归搜索功能,但是当我尝试重命名 ForEach-Object
循环中的文件时收到有关 InvalidOperationException
的错误。此外,恐怕我的顺序编号不是每个重命名文件的文件夹的 'reset'。
$i = 0
Get-ChildItem -Filter "*.jpg" -Recurse | ForEach-Object {
Rename-Item $_ -NewName ('$i.jpg' -f $i++)
}
那么,两个问题:
- 如何修复
Rename-Item
的错误?
- 如何确保为脚本开始重命名文件的每个子文件夹重置我的变量?
如果采取两步法,首先获取所有包含 jpg 的文件夹,然后遍历此列表,则从 1 开始没有问题。但我总是使用前导零进行此类重新编号。
$BaseFld = "Q:\Test\"
$Ext = "*.jpg"
$jpgFolders = gci $($BaseFld+$Ext) -Recurse |
Select -ExpandProperty Directory -Unique |
select -ExpandProperty Fullname | Sort
ForEach ($Folder in $jpgFolders) {
Set-location $Folder
$i = 1
Get-ChildItem $Ext | %{Ren $_ -NewName ('{0:D4}.jpg' -f $i++) -whatif}
}
如果输出适合您,请删除倒数第二行中的 -whatif
其他方法
$rootdir="C:\temp"
gci $rootdir -Recurse -Directory | %{$i=1; gci $_.FullName -Recurse -File -Filter "*.jpg" | %{Ren $_.FullName -NewName ('{0}.jpg' -f $i++)} }
我有一系列文件夹和子文件夹,结构如下:
- 001/Fabric/Blue/(.jpg 文件,按顺序命名)
- 001/Fabric/Green/(.jpg 文件,按顺序命名)
- 002/Fabric/Blue/(.jpg文件,按顺序命名)
- 002/Fabric/Green/(.jpg文件,按顺序命名)
- 等等
我想删除文件名中多余的字符串字符,我想将它们的文件名转换为更简单的顺序格式(0.jpg、1.jpg 等)。
我尝试使用几个不同的 PowerShell 示例来实现它。我有递归搜索功能,但是当我尝试重命名 ForEach-Object
循环中的文件时收到有关 InvalidOperationException
的错误。此外,恐怕我的顺序编号不是每个重命名文件的文件夹的 'reset'。
$i = 0
Get-ChildItem -Filter "*.jpg" -Recurse | ForEach-Object {
Rename-Item $_ -NewName ('$i.jpg' -f $i++)
}
那么,两个问题:
- 如何修复
Rename-Item
的错误? - 如何确保为脚本开始重命名文件的每个子文件夹重置我的变量?
如果采取两步法,首先获取所有包含 jpg 的文件夹,然后遍历此列表,则从 1 开始没有问题。但我总是使用前导零进行此类重新编号。
$BaseFld = "Q:\Test\"
$Ext = "*.jpg"
$jpgFolders = gci $($BaseFld+$Ext) -Recurse |
Select -ExpandProperty Directory -Unique |
select -ExpandProperty Fullname | Sort
ForEach ($Folder in $jpgFolders) {
Set-location $Folder
$i = 1
Get-ChildItem $Ext | %{Ren $_ -NewName ('{0:D4}.jpg' -f $i++) -whatif}
}
如果输出适合您,请删除倒数第二行中的 -whatif
其他方法
$rootdir="C:\temp"
gci $rootdir -Recurse -Directory | %{$i=1; gci $_.FullName -Recurse -File -Filter "*.jpg" | %{Ren $_.FullName -NewName ('{0}.jpg' -f $i++)} }