2015-08-30 2 views
0

Я попытался переименовать кучу файлов (также в подпапках), чтобы файлы фильмов были распознаны для моей системы воспроизведения мультимедиа (Plex).Пакетный файл для переименования файлов (+ вложенных папок)

До:

'TBBT - Сезон 06 Эпизод 09 - The место парковки Escalation.mkv'

После: 'TBBT - S06E09 - стоянки месте Escalation.mkv'

Я хотел бы переименовать полные шоу всего одним щелчком мыши, поэтому по существу я пытаюсь изменить

«Сезон» на «S» и «Episode» на «E»

Вот что я пробовал:

for /r %%x in (*Season 0* Episode 0*) do ren "%%x" *S0*E0* 

С пытается заменить пробелы с подчеркиванием первым я только получил некоторые Mixup результат : 'TBBT _-_ Season_06_Episode_09 _-_ The_Parking_S ot_E calation'

К сожалению, я застрял здесь ...

+0

Нужно ли вам использовать партию или подходит для вас тоже Python? – albert

+0

Зависит от того, насколько легко понять подход Python. Я до сих пор не использовал python, поэтому для меня это было бы совершенно новым. – XRAY

ответ

1

Вы можете использовать следующее:

Setlocal enabledelayedexpansion 
Set "Pattern1=Season " 
Set "Pattern2= Episode " 
Set "Replace1=S" 
Set "Replace2=E" 

For %%# in ("C:\Folder\*.mkv") Do (
    Set "File=%%~nx#" 
    Ren "%%#" "!File:%Pattern1%=%Replace1%!" 
    echo %File% 
) 
For %%# in ("C:\Folder\*.mkv") Do (
    Set "File=%%~nx#" 
    Ren "%%#" "!File:%Pattern2%=%Replace2%!" 

И это еще проще с помощью PowerShell, если вы хотите:

dir "c:\Folder" -file -recurse | rename-item -NewName {$_.name.Replace('Season ','S').replace(' Episode ', 'E')} 
+0

Чтобы упростить это, я использовал txt-файл с: 'Set" Pattern1 = старый текст " Установить" Replace1 = новый текст " Для %% # in (" C: \ Users \ XRAY \ Desktop \ Batch \ Test \ t2 \ *. txt ") Do ( Set" File = %% ~ nx # " Ren" %% # ""! Файл:% Pattern1% =% Replace1%!" )' Я получаю сообщение об ошибке: „Имя дубликатов файлов существует, или файл не может быть найден“ PowerShell подход работает, но не для подпапок – XRAY

+0

@XRAY Попробуйте отредактированную команду Powershell с помощью рекурсии. -. сделайте это на копиях ваших файлов в качестве теста в первую очередь. – foxidrive

+0

equinox93: в вашем пакетном коде отсутствует замедленное расширение, но ему нужно отметить, что все символы '!' будут вызывать сбои - и это общий символ в заголовках. – foxidrive

0

Поскольку подход Python представляется приемлемым из-за this comment здесь.

Предполагая структуру каталогов, как следующие:

. 
├── Season1Episode1.mkv 
├── Season2Episode2.mkv 
└── subfolder 
    ├── Season1Episode1.mkv 
    └── Season2Episode2.mkv 

После запуска сценария Python приведены ниже, файлы будут переименованы по желанию:

. 
├── S1E1.mkv 
├── S2E2.mkv 
└── subfolder 
    ├── S1E1.mkv 
    └── S2E2.mkv 

Сценарий Python3 выглядит следующим образом:

#!/usr/bin/env python3 
# coding: utf-8 

import os 

# rename files or just see how files would be renamed? 
DRY_RUN = True 

# specify file extension and replacements 
EXTENSION = '.mkv' 
REPLACE = [('Season', 'S'), ('Episode', 'E')] 

# walk through directory and handle files 
for path, subdirs, files in os.walk('.'): 
    for name in files: 
     if name.endswith(EXTENSION): 
      full_path = os.path.join(path, name) 
      new_path = full_path 
      for i in REPLACE: 
       new_path = new_path.replace(i[0], i[1]) 
      print('{} --> {}'.format(full_path, new_path)) 
      if not DRY_RUN: 
       os.rename(full_path, new_path) 

Сценарий должен быть сохранен и выполнен в корневой директории co чтобы переименовать файлы. Несмотря на Python3, ничего не нужно. Установите DRY_RUN = True, чтобы имитировать файлы переименования, тогда как DRY_RUN = False переименовал бы найденные файлы.