Переименуйте определенные символы из имен файлов во всех файлах в папке и его подпапках

#windows #powershell #replace #directory

#Windows #powershell #заменить #каталог

Вопрос:

Я хочу заменить определенный символ из моих файлов, например

я хочу изменить> «оригинал» -> «что-то еще»

я использую этот скрипт для замены его в одной папке только с помощью powershell

 Dir |>> Rename-Item -NewName { $_.Name -replace "original","something " }
  

проблема в том, что с этим кодом это заменяет только файлы внутри одной папки и не заменяет их во вложенных папках
мне нужно, чтобы это заменило его в файле в папке и в файлах вложенной папки тоже, возможно ли это?

( я вроде как новичок в этом)

примечание: этот код показывает эту ошибку, когда есть какие-либо вложенные папки с файлами

ошибка =

 Rename-Item : Source and destination path must be different.
At line:2 char:1
  Rename-Item -NewName { $_.Name -replace "original","something " }
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : WriteError: (F:folder-name...ffpy-compat:String) [Rename-Item], IOException
      FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
  

Операционная система: Windows

Информация

Модель операционной системы: Windows 10

Комментарии:

1. 2-я строка абзаца: быстрое исправление > я хочу изменить> «оригинал» -> «что-то»

2. Get-ChildItem -Path 'TheRootFolder' -File -Recurse | Rename-Item -NewName ($_.Name -replace 'original', 'something')

Ответ №1:

В случае каталогов rename-item командлет получает тот же путь, что и входные данные, и значение -newname параметра, поэтому выдает ошибку. Добавление параметров -verbose и -whatif switch в команду покажет это.

Используйте -Path параметр, чтобы указать базовый путь, который вы хотите повторить, -recurse параметр switch для рекурсивного посещения каждой подпапки, -file параметр switch для фильтрации каталогов и / или используйте -filter параметр для включения подмножества файлов.

Пример:

 get-childitem -Recurse -File -Path 'c:temp' | rename-item -newname { $_.name -replace "original","replacement }