Windows Power Shell скрипт для переименования всех файлов в каждом каталоге на имя родителя - PullRequest
0 голосов
/ 31 октября 2011

Я работаю над изучением Windows PS - но до Мне нужна помощь в написании быстрой команды:

У меня есть каталог каталогов, каждый каталог имеет уникальное имя.

Мне нужно переименовать все файлы в каждом из этих каталогов на имя их родителей!Следующее:

Текущая структура:

/pdfdirectory/pdf_title_directory/filename.pdf
/pdfdirectory/pdf_title_directory123/filename.pdf

После сценария оболочки:

/pdfdirectory/pdf_title_directory/pdf_title_directory.pdf
/pdfdirectory/pdf_title_directory123/pdf_title_directory123.pdf

Спасибо!

Ответы [ 2 ]

5 голосов
/ 31 октября 2011

С уважением, что вы изучаете Powershell и попробуете материал:

gci .\test -recurse | ?{ -not $_.PsIsContainer } | 
%{rename-item -path $_.fullname -newname ($_.Directory.Name + $_.Extension)}

Конечно, вышеописанное не даст результатов, если в каталоге более одного файла.

Чтобы понять вышесказанное, изучите основные команды Powershell, такие как gci (псевдоним для Get-ChildItem) и концепции конвейера Powershell.

1 голос
/ 01 ноября 2011

Стоит отметить, что вы можете направить вывод из Get-ChildItem непосредственно в Rename-Item, вам не нужен foreach. Кроме того, и это умная часть, значение параметра -NewName может быть блоком сценария, который выдает новое имя. Этот блок сценария может использовать $ _ для обращения к объекту файла, который в данный момент обрабатывается.

Так что вы можете сделать что-то вроде этого:

dir -Recurse -Include filename.pdf | ren -NewName { "$($_.Directory.Name).pdf" }

(я думаю, что именно Кит Хилл заставил меня осознать этот трюк.)

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