Пакетное переименование всех файлов в нескольких папках

#windows #powershell

#Windows #powershell

Вопрос:

🙂

Допустим, в пути к файлу, C:UsersCurrentUserDocumentsRecords , есть несколько папок.

Я хочу переименовать все файлы во всех папках, добавив их соответствующие имена папок перед их текущими именами файлов.

Например, папка 1 и папка 2 существуют в C:UsersCurrentUserDocumentsRecords . Все файлы в папке 1 должны быть переименованы с добавлением «папка 1» впереди. И все файлы в папке 2 должны быть переименованы с добавлением «папка 2» впереди. Итак, что-то вроде файла «Счет-фактура» в папке 1 переименовывается в «Счет-фактура папки 1». То же самое с папкой 2.

Есть ли способ сделать это в Powershell? Любая помощь очень ценится! 🙂

Ответ №1:

Я думаю, это должно сработать:

 (Get-ChildItem -Path 'C:UsersCurrentUserDocumentsRecords' -File -Recurse) | 
 Rename-Item -NewName {'{0} {1}' -f $_.Directory.Name, $_.Name} -WhatIf
  

-WhatIf Переключение является мерой предосторожности. С добавлением этого код будет показывать только в консоли, что произойдет. Если вас это устраивает, снимите -Whatif переключатель, чтобы фактически начать переименование файлов.

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

1. Привет! Я попробовал, но, похоже, он ничего не делает даже с WhatIf. Обратите внимание, что это папка со многими папками с файлами, которые нуждаются в переименовании 🙂

2.@ZhenYang Я не вижу, что вы делаете, и есть ли у вас разрешение на все файлы в корневой папке, но для меня это работает так, как ожидалось. (Версия PowerShell 5.1). Как я пытался объяснить, with -WhatIf ничего не переименовывается; это только покажет вам. Без -WhatIf переименования файлов. Какую версию PowerShell вы используете? -File Переключатель доступен только с версии 3.0