Переименование массовых файлов с указанным именем в каталог и подпапки с помощью PowerShell - PullRequest
0 голосов
/ 29 ноября 2018

Я ищу решение переименовать все файлы с указанным именем в каталоге и подпапках.

Например, есть каталог с именем c:\blah, и в этой папке есть один файл с именем BaR.txt и одна папка называется foo.В папке foo есть еще один файл с именем bAr.txt.Я хочу найти все файлы с именем bar.txt и изменить имя каждого файла на «neo.txt».Также должна быть возможность переименовать файлы в нижний регистр, например, bar.txt.До сих пор я пытался сделать это вручную с помощью проводника Windows в Windows10, но по какой-то странной причине, когда я пытаюсь переименовать массовые файлы, в конце каждого имени файла добавляется дополнительный знак «(1)».Я попытался поиграть с PowerShell и создал команду

$_.name -replace 'bar.txt','neo.txt'  

, но у меня она не сработала.

1 Ответ

0 голосов
/ 29 ноября 2018

Для этого вам нужно 2 командлета: Get-ChildItem и Rename-Item.

. Это должно работать:

Get-ChildItem -Path 'C:\Blah' -Filter 'bar.txt' -Recurse | ForEach-Object {
    Rename-Item -Path $_.FullName -NewName 'neo.txt'
}

Однако, если внутри папки foo естьбольше подпапок, этот код переименует все файлы с именем bar.txt (без учета регистра), которые он найдет во всех этих подпапках.

Если вы не хотите идти глубже, чем первая подпапка в C:\Blah (тот, который называется foo), вы можете использовать параметр -Depth в команде следующим образом:

Get-ChildItem -Path 'C:\Blah' -Filter 'bar.txt' -Recurse -Depth 1 | ForEach-Object {
    Rename-Item -Path $_.FullName -NewName 'neo.txt'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...