用于重命名文件的批处理文件(+子文件夹)

时间:2015-08-30 12:17:27

标签: batch-file batch-rename

我尝试重命名一堆文件(也在子文件夹中),以便为我的媒体播放系统(Plex)识别电影文件。

之前:

' TBBT - 第06季第9集 - 停车位Escalation.mkv'

之后:' TBBT - S06E09 - 停车位Escalation.mkv'

我只想点击一下就重命名完整的节目,所以基本上我试图改变

  

'季节'到了' S'和'插曲'到' E'

以下是我的尝试:

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

首先尝试用下划线替换空格我只得到一些混淆结果: ' TBBT _-_ Season_06_Episode_09 _-_ The_Parking_S的 0 ot_E的 0 calation'

不幸的是我被困在这里......

2 个答案:

答案 0 :(得分: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')}

答案 1 :(得分:0)

由于this comment这里的Python方法似乎可以接受,所以它是。

假设目录结构如下:

.
├── 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)

应该在包含要重命名的文件的根目录中保存和执行脚本。尽管有Python3,但不需要额外的东西。设置DRY_RUN = True以模拟重命名文件,而DRY_RUN = False将重命名找到的文件。