我几乎没有任何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。如果可以使用更简单的命令提示符批处理文件来完成此操作,请随时告诉我。
答案 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'。你已经很近了。