У меня почти нет опыта в PowerShell, но я использовал его как средство для достижения цели, чтобы заменить, возможно, проблемные символы в именах файлов FAT32, такие как:,./ ': и т. д.
Я обнаружил статью, в которой говорится об использовании команды rename-item -NewName , которая отлично работает в определенном каталоге, содержащем файлы, отвечающие указанным критериям, но при использовании на уровневыше этого я не могу понять, как сделать сценарий полностью рекурсивным.
Я хочу заменить пробелы, апострофы, экземпляры точек вне расширений файлов и знаки доллара в именах звуковых дорожек внутри музыкипапка библиотеки, которая выложена примерно так **, запустив скрипт powershell из папки music , чтобы поразить все внутри и ниже:
X:\home\audio\**music**\[artist_here]\[album_here]\FILE.mp3
Может кто-нибудь объяснить правильный синтаксис для выполненияthis?
Я также пытался использовать путь и / 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
СпасибоYОУ!
PS Если это можно сделать с помощью более простого командного файла командной строки, не стесняйтесь меня просветить.