Пакетная команда для переименования имен файлов, например «The Kids Performances (2020).mp4» в «Kids Performances, The (2020).mp4»

Пакетная команда для переименования имен файлов, например «The Kids Performances (2020).mp4» в «Kids Performances, The (2020).mp4»

У моей семьи есть записи выступлений детей в школе и внеклассных мероприятиях, сохраненные за эти годы в основном в файлах .aviи .mp4. Меня попросили взять все эти файлы (их гораздо больше сотни) и переименовать все видео, которые начинаются со слова Theили, Aи переместить их в конец.

Например, видео с названием The Kids Performances (2020).mp4будет изменено на Kids Performances, The (2020).mp4. Понятия не имею, почему они вообще хотят сохранить слова Theи «А» в заголовках, но они это делают.

Я использую Windows и нашел на этом сайте относительно простой способ избавиться от символа Theв начале заголовков, но не могу придумать, как переместить его в конец заголовка перед годом, который всегда указывается как (год).

Вот о чем я говорю:

for %%i in ("*.mp4") do (set fname=%%i) & call :rename
goto :eof
:rename
::Cuts off 1st four chars, then appends prefix
ren "%fname%" "%fname:~4%"
goto :eof

Это позволяет удалить первые 4 символа из названий в пакетном формате, но у меня возникли проблемы с перемещением этих первых 4 символов в конец названия перед годом. Я умолял членов моей семьи просто убрать эти слова из названия вообще, но я не могу их убедить.

У меня также установлен Python на ПК, если это обеспечит более простой способ достижения этой цели. Заранее спасибо всем, кто сможет помочь!

решение1

PowerShellс легко расширяемым списком статей и списком расширений (мы можем использовать-whatIf(Для тестирования, а затем удалить его, чтобы применить наши изменения.)

$ArticleList = @( 'A' , 'The' )
$ExtList     = @( '*.avi' , '*.mp4' )
# From folder with files
# Remove "-WhatIf" to execute after testing
gci $ExtList | 
   ? { $_.BaseName -match ( '^({0})\s(\.+)\s(\(\d+\))' -f ( $ArticleList -join '|' )) } | 
       ReName-Item -NewName { '{0}, {1} {3}{4}' -f $matches[2] , $matches[1] , $matches[3] , $_.Extension -WhatIf }

'^({0})\s(\.+)\s(\(\d+\))' -f ( $ArticleList -join '|' )

создает регулярное выражение

'^(Article[0]|Article[1]{|...})\s(\.+)\s(\(\d+\))'

с тремя соответствующими группами:

  • Article : ({0})
  • TitleTExt: \s(\.+)
  • (Year) : (\(\d+\))

используется для создания нового имени.

решение2

Это не автоматизированное решение, как то, что опубликовал Кейт Миллер, но как человек, написавший достаточно сценариев cmd, чтобы знать, что не хочу писать еще один, я бы использовал Excel для этого:

  1. Откройте командную строку и перейдите в папку с файлами, которые необходимо переименовать.
  2. Скопируйте список имен файлов в буфер обмена с помощью dir /b | clip(или dir /b /s | clip, если файлы сохранены в подкаталогах), и вставьте его в Excel.
  3. Сохраните новые имена файлов в другой столбец, используя любые формулы, которые вам нужны. Если вы не можете сделать это полностью автоматически, вы всегда можете вручную подправить результаты, где это необходимо.
  4. Как только вы будете довольны новыми именами файлов, создайте формулу Excel для переименования файлов по одному. На этом этапе таблица может выглядеть примерно так:
А Б С Д Э Ф г
1 Формулы:
2 Исходное имя файла Префикс Год Расширение Остальная часть имени файла Новое имя файла Команда
3 Детское представление (2018).avi =ЕСЛИ(ИЛИ(ВЕРХНИЙ(ЛЕВЫЙ(A3;2))="A ";ВЕРХНИЙ(ЛЕВЫЙ(A3;4))="THE ");ЛЕВЫЙ(A3;НАЙТИ(" ";A3)-1);"") =СРЕДН(A3;НАЙТИ("(";A3)+1;4) =ПРАВСИМВ(A3;3) =ПРИМЕР(A3;ЕСЛИ(B3="";1;ДЛСТР(B3)+2);ДЛСТР(A3)-ДЛСТР(B3)-ДЛСТР(C3)-ДЛСТР(D3)-ЕСЛИ(B3="";4;5)) =E3&ЕСЛИ(B3="";"";", "&B3)&" ("&C3&")."&D3 ="рен """&A3&""" """&F3&""""
4 Выступление некоторых детей (2019).mkv =ЕСЛИ(ИЛИ(ВЕРХНИЙ(ЛЕВЫЙ(A4;2))="A ";ВЕРХНИЙ(ЛЕВЫЙ(A4;4))="THE ");ЛЕВЫЙ(A4;НАЙТИ(" ";A4)-1);"") =СРЗНАЧ(A4;НАЙТИ("(";A4)+1;4) =ПРАВСИМВ(A4;3) =ПРИМЕР(A4;ЕСЛИ(B4="";1;ДЛСТР(B4)+2);ДЛСТР(A4)-ДЛСТР(B4)-ДЛСТР(C4)-ДЛСТР(D4)-ЕСЛИ(B4="";4;5)) =E4&ЕСЛИ(B4="";"";", "&B4)&" ("&C4&")."&D4 ="рен """&A4&""" """&F4&""""
5 Детские выступления (2020).mp4 =ЕСЛИ(ИЛИ(ВЕРХНИЙ(ЛЕВЫЙ(A5;2))="A ";ВЕРХНИЙ(ЛЕВЫЙ(A5;4))="THE ");ЛЕВЫЙ(A5;НАЙТИ(" ";A5)-1);"") =СРЕДН(A5;НАЙТИ("(";A5)+1;4) =ПРАВСИМВ(A5;3) =ПРИМЕР(A5;ЕСЛИ(B5="";1;ДЛСТР(B5)+2);ДЛСТР(A5)-ДЛСТР(B5)-ДЛСТР(C5)-ДЛСТР(D5)-ЕСЛИ(B5="";4;5)) =E5&ЕСЛИ(B5="";"";", "&B5)&" ("&C5&")."&D5 ="рен """&A5&""" """&F5&""""
1 Ценности:
2 Исходное имя файла Префикс Год Расширение Остальная часть имени файла Новое имя файла Команда
3 Детское представление (2018).avi А 2018 avi Выступление детей Представление для детей, А (2018).avi ren "Детское представление (2018).avi" "Детское представление, A (2018).avi"
4 Выступление некоторых детей (2019).mkv 2019 mkv Выступление некоторых детей Выступление некоторых детей (2019).mkv ren "Some Kids Performance (2019).mkv" "Some Kids Performance (2019).mkv"
5 Детские выступления (2020).mp4 The 2020 mp4 Детские выступления Детские выступления, (2020).mp4 ren "Детские представления (2020).mp4" "Детские представления, (2020).mp4"
  1. Выберите ячейки с вычисленными командами (в приведенном выше примере G3:G5) и скопируйте их, чтобы поместить в буфер обмена, и либо щелкните правой кнопкой мыши в окне командной строки (возможно, вам придется нажать Enter на последней строке), либо вставьте содержимое буфера обмена в пустой файл *.cmd или *.bat, сохраните его в папке с файлами, которые необходимо переименовать, и запустите.

Связанный контент