递归重命名项目-NewName语法

时间:2018-12-26 22:24:48

标签: windows powershell batch-file

我几乎没有任何Powershell经验,但一直以此为目的来替换FAT32文件名中可能有问题的字符,例如:,。 /':等。

我发现有一篇文章介绍了使用 rename-item -NewName 命令的方法,该命令在包含满足上述条件的文件的特定目录中可以正常工作,但是在此之上的级别使用时,我无法弄清楚如何使脚本完全递归。

我要替换空格,撇号,文件扩展名之外的句点实例,以及音乐库文件夹中音轨文件名中的美元符号,其布局如下**,并从 music运行powershell脚本文件夹,以查找该文件夹内及其下的所有内容:

X:\home\audio\**music**\[artist_here]\[album_here]\FILE.mp3

有人可以解释正确的语法来做到这一点吗?

我也尝试使用path和/ s:

dir X\pathnamehere\ /s | rename-item -NewName {$_.name -replace " ","_"}

但收到另一个错误:

dir : Second path fragment must not be a drive or UNC name.
Parameter name: path2
At line:1 char:1
+ dir X:\home\Audio\Music\ /s | rename-item -NewName {$_.name -repla ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (X:\home\Audio\Music:String) 
[Get-ChildItem], ArgumentException
+ FullyQualifiedErrorId : 
DirArgumentError,Microsoft.PowerShell.Commands.GetChildItemCommand

dir | rename-item -NewName {$_.name -replace " ","_"}

运行时

dir | rename-item -NewName {$_.name -replace " ","_"}

在要重命名的文件所在的多个级别上,对于\ music中的每个目录,我都会收到以下错误:

"rename-item : Source and destination path must be different." 

+ dir | rename-item -NewName {$_.name -replace " ","_"}
+       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : WriteError: 
(X:\home\Audio\Music\artistname:String) [Rename-Item], IOException
+ FullyQualifiedErrorId : 
RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

谢谢!

P.S。如果可以使用更简单的命令提示符批处理文件来完成此操作,请随时告诉我。

1 个答案:

答案 0 :(得分:1)

在这里找到了解决方案: Recursively renaming files with Powershell

这是他们的例子:

Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.Name.replace(".mkv.mp4",".mp4")}

在powershell中,Dir是Get-ChildItem的别名,%是'ForEach'。你已经很近了。