Как пакетно переименовать файлы, чтобы удалить специальные символы с PowerShell - PullRequest
1 голос
/ 11 февраля 2020

Просто пытаюсь изменить группу файлов, которые начинаются с

02. SongName.Mp3
02 - OtherName.Mp3
02 MoreNames.Mp3
03. Song.mp3
03 - Songs.mp3

на

SongName.Mp3
OtherName.Mp3
MoreNames.Mp3
Song.mp3
Songs.mp3

Я знаю, что это действительно простая команда [ren], но она выходит за пределы мой мозг. Я использую файл> open> powershell для папки, поэтому нет необходимости использовать dir, cd или что-то еще.

Ответы [ 3 ]

1 голос
/ 11 февраля 2020
Get-ChildItem *.mp3 | Rename-Item -NewName { $_.Name -replace '^[^\p{L}]+' } -WhatIf

Примечание: -WhatIf общий параметр в приведенной выше команде просматривает операцию. Удалите -WhatIf, как только вы убедитесь, что операция выполнит то, что вы хотите.

Приведенное выше переименовывает файлы *.mp3, удаляя любые символы перед первой буквой (\p{L}) из имени файла; файлы, имя которых уже начинается с буквы, остаются без изменений.

Используемые методы:

1 голос
/ 11 февраля 2020

Я возьму трещину в этом. Замените числа, точки, тире и пробелы ничем, при условии, что все файлы являются mp3. (Или "копия-пункт-назначение")

# test files
# echo hi | set-content '02. SongName.Mp3','02 - OtherName.Mp3','02 MoreNames.Mp3','03. Song.mp3','03 - Songs.mp3'

dir *.mp3 | rename-item -newname { ($_.basename -replace '[\d\.\- ]') + '.mp3' } -whatif

What if: Performing the operation "Rename File" on target "Item: /Users/js/foo/02 - OtherName.Mp3 Destination: /Users/js/foo/OtherName.mp3".
What if: Performing the operation "Rename File" on target "Item: /Users/js/foo/02 MoreNames.Mp3 Destination: /Users/js/foo/MoreNames.mp3".
What if: Performing the operation "Rename File" on target "Item: /Users/js/foo/02. SongName.Mp3 Destination: /Users/js/foo/SongName.mp3".
What if: Performing the operation "Rename File" on target "Item: /Users/js/foo/03 - Songs.mp3 Destination: /Users/js/foo/Songs.mp3".
What if: Performing the operation "Rename File" on target "Item: /Users/js/foo/03. Song.mp3 Destination: /Users/js/foo/Song.mp3".

0 голосов
/ 11 февраля 2020
   Get-ChildItem *.mp3 |
     Where-Object Name -match '^.{4}(.+).\.(.+)$' | 
       Copy-Item -Destination { $Matches.1 + '.' + $Matches.2 }

Это работает для того, что я пытался сделать. Особое примечание: он копирует файлы, но не переименовывает существующие.

...