使用 Powershell 在文件前面加上当前目录名称

使用 Powershell 在文件前面加上当前目录名称

我有包含图像的文件夹(*.png 和 *.jpg)

>C:\Directory\Folder1
01.png
02.png
03.jpg
04.jpg
05.png

我想使用 powershell 重命名所有文件,如下所示:

>C:\Directory\Folder1
Folder1 - 01.png
Folder1 - 02.png
Folder1 - 03.jpg
Folder1 - 04.jpg
Folder1 - 05.png

因此我想出了这句简单的话:

Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png"} | rename-item -newname {$_.Directory.Name +" - " + $_.Name}

如果文件夹中有 35 个或更少的文件,我将得到想要的结果,但如果有36岁或以上文件,我将得到以下结果:

>C:\Directory\Folder1
Folder1 - Folder1 - Folder1 - 01.png
Folder1 - Folder1 - Folder1 - 02.png
Folder1 - Folder1 - Folder1 - 03.jpg
Folder1 - Folder1 - Folder1 - 04.jpg
Folder1 - Folder1 - Folder1 - 05.png

当文件名超过 248 个字符时循环停止。

知道它为什么循环吗?

编辑:正如所提议的,一个简单的解决方案是检查文件夹的名称是否已添加到文件的名称中:

Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png" -and !$_.Name.StartsWith($_.Directory.Name) } | rename-item -newname {$_.Directory.Name +" - " + $_.Name}

但它没有告诉我为什么当文件夹中有超过 36 个文件时它会循环。

答案1

看起来重命名对于循环来说就像是一个新文件,因此它会被再次处理。

尝试进行额外的测试以停止它查看以“文件夹 1”开头的任何文件。

相关内容