Существует ли одна строка кода для изменения расширений всех папок и подпапок с помощью powershell? - PullRequest
0 голосов
/ 02 января 2019

Я использовал следующий код для пакетного изменения одного расширения в одной папке за раз.

Dir *.mkv | rename-item -newname { $_.name -replace ".mkv",".vlc" }

Я хочу иметь одну строку кода, которая будет

  • изменить все типы расширений файлов на одно расширение

  • включить файлы в подпапки

Любая помощь по этому вопросу будет принята с благодарностью, СПАСИБО

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Используйте -Recurse для включения подпапок.Используйте BaseName, которое является именем файла без расширения.
Прочтите документацию для получения дополнительной информации о

Get-ChildItem *.mkv -Recurse | Rename-Item -NewName {"$($_.BaseName).vlc"}

Редактировать

Извините, я пропустил эту часть:

изменить все типы расширений файлов на одно расширение

Чтобы изменить все расширения файлов, вам просто нужно исключить *mkv, но какпокрывается ответом LotPings это не рекомендуется;очень легко изменить расширение файлов, которые вы не хотели.Он рассматривает использование параметра -Include, который является рекомендуемым способом, так как он фильтрует на ранних этапах.

Чтобы показать другой способ, вы можете использовать свойство Extension.Это позволяет использовать все операторы сравнения PowerShell - примеры ниже.

Get-ChildItem -Recurse | Where-Object {$_.Extension -eq ".mkv"}
Get-ChildItem -Recurse | Where-Object {$_.Extension -in @(".mkv",".avi")}
Get-ChildItem -Recurse | Where-Object {$_.Extension -ne ".vlc"}
0 голосов
/ 02 января 2019

Я бы не стал изменять ВСЕ расширения, просто используйте -Include и представьте список

Get-ChildItem -Path X:\start\here -Recurse -Include ('*.mkv','*.xyz')| Rename-Item -NewName {$_.BaseName+'.vlc'} -WhatIf

Если вывод выглядит нормально, удалите завершающий -WhatIf

0 голосов
/ 02 января 2019

как вы также пометили его batch-file:

for /r %%a in (*.mkv) do @ECHO ren "%%a" "%%~na.vlc"

(это синтаксис пакетного файла. Если вы хотите использовать его непосредственно в командной строке)

for /r %a in (*.mkv) do @ECHO ren "%a" "%~na.vlc"

Удалите @ECHO, если вывод соответствует вашим потребностям.

...