2013-08-07 5 views
1

Мне нужно переименовать кучу файлов сразу в Windows PowerShell. Я прочитал статью HTG here, и это немного помогло.Переименование файлов с помощью PowerShell

Моя проблема заключается в том, что он будет переименовывать файлы только в верхней части каталога, ничего глубже. Например: существует FOLDER A, а внутри FOLDERA - документ и FOLDER B. Внутри FOLDER B есть другой документ. Обе папки и оба документа необходимо переименовать. Как это работает в настоящее время является то, что FOLDER A, документ в FOLDER A и ПАПКА B переименовываются, а не документ внутри FOLDER B.

Мой текущий код:

Dir | Rename-Item –NewName { $_.name –replace “ “,”_” } 

Спасибо за помощь!

ответ

3

Вы должны указать параметр на Dir -Recurse, чтобы заставить его рекурсию например:

Dir -recurse | Rename-Item -NewName {$_.Name -replace ' ','_'} 

BTW это может столкнуться с проблемой, потому что вы переименовать папку (FOLDERB), который содержит документ первый, но элемент, который передается по каналу, который соответствует файлу в FOLDERB, по-прежнему имеет старое имя. В этом случае вы хотите переименовать снизу вверх. Один очень грубый, но эффективный (я думаю) способ сделать это, чтобы отсортировать элементы файлов на их путях длиной нисходящего например:

Dir -recurse | Sort {$_.FullName.Length} -Desc | Rename-Item {$_.Name -replace ' ','_'} 
+0

Это возвращается с ошибкой: Rename-Item: Невозможно переименовать, потому что цель, задающее представления путь или имя устройства. – Kyle2595

+0

Неверный вопрос. Посмотрите, соответствует ли обновленный ответ вашей проблеме. –

+0

Прохладный, большое вам спасибо! Оно работало завораживающе! – Kyle2595

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