2014-08-14 2 views
0

Привет, я использую следующий Powershell скрипт, чтобы очистить некоторые имена файлов ..Замена "." в Powershell без изменения расширения

get-childitem -recurse -Include *.mp4 | foreach { rename-item $_ $_.Name.Replace(".", " ") } 

Короче говоря, замена «» с "" .. Однако это также удаляет "." предшествующий расширению .. Есть ли способ исключить окончательное "." поэтому расширение не изменяется?

ответ

1

Вам необходимо разделить путь, имя базового файла и расширение. К счастью, объекты, возвращенные Get-ChildItem, предоставят вам их.

Это должно работа (перевод строки для удобства чтения)

get-childitem -recurse -Include *.mp4 | ForEach-Object { 
rename-item $_ -newname $(Join-Path -Path $_.DirectoryName -ChildPath "$($_.BaseName.Replace(".", " "))$_.Extension)") -WhatIf } 

Удалить -whatif как только вы подтвердили, что он будет делать то, что вы хотите.

+0

Используя пункт «Переименовать», вам не нужно указывать путь (на самом деле это лучше не делать, поскольку, если путь отличается, он просто выдает ошибку). Вы действительно могли бы укоротить эту вещь -NewName до '' $ ($ _. BaseName.Replace (".", "")) $ _. Extension) "' – TheMadTechnician

+0

@TheMadTechnician Я использую этот код: 'get-childitem -recurse -Include * .mp4 | ForEach-Object {rename-item $ _ -newname "$ ($ _. BaseName.Replace (". "," ")) $ _. Extension)"} ', но я продолжаю получать ошибку в Cht58 (rename-item) .. Я ошибаюсь в синтаксисе? –

+0

Извините, у меня был ')', где я должен был иметь '+' там. Я бы сделал: 'Get-ChildItem -recurse -include * .mp4 | ForEach {$ _ | Rename-Item -NewName "$ ($ _. BaseName.Replace (". "," ") + $ _. Extension)"} ' – TheMadTechnician

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