Рекурсивный синтаксис rename-item -NewName - PullRequest
0 голосов
/ 27 декабря 2018

У меня почти нет опыта в 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 Если это можно сделать с помощью более простого командного файла командной строки, не стесняйтесь меня просветить.

1 Ответ

0 голосов
/ 27 декабря 2018

Нашел решение здесь: Рекурсивное переименование файлов с помощью Powershell

Вот их пример:

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

В powershell Dir - это псевдоним Get-ChildItem и%это «ForEach».Вы были довольно близко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...