2016-11-14 3 views
1

Я хочу переименовать файлы на основе предыдущих двух названий каталогов. Например, ниже файл:Переименовать файлы на основе предыдущих двух имен каталогов

C:\temp\288\Issue level 1\288 Temper inad.doc 

Я хочу, чтобы переименовать

288-Issue level 1-288 Temper inad.doc 

Я создал следующий Powershell команды:

Get-ChildItem "C:\temp\288\Issue level 1" -Filter *.doc -Recurse | Rename-Item -NewName { $_.Directory.Name+'_'+$_.Name} 

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

+0

Вашего выбирающего только файлы из папки '288 \ уровня выпуска 1', таким образом, нет никаких причин, почему ваш сценарий должен переименовать и другие файлы в папке' 288'. – davidhigh

ответ

2

Просто используйте свойство ParentDirectory, чтобы получить предыдущее имя каталога. Кроме того, я хотел бы использовать формат строку:

Get-ChildItem "C:\temp\288\Issue level 1" -Filter *.doc -Recurse | 
    Rename-Item -NewName { '{0}-{1}-{2}' -f $_.Directory.Parent.BaseName, $_.Directory.BaseName, $_.Name } 
+0

Извините, но как я могу получить уровни уровня X? Является ли это возможным? – 4c74356b41

+0

Вы можете написать функцию, которая построит вам строку на основе пройденного уровня каталога. Не должно быть трудно. –

+0

ну, я имел в виду несколько «родной» подход. вы имеете в виду что-то делать с разбором фактической строки и подсчетом количества '' '' 'в ней? – 4c74356b41

Смежные вопросы