【问题标题】:Batch file for renaming files (+subfolders)用于重命名文件的批处理文件(+子文件夹)
【发布时间】:2015-08-30 12:17:26
【问题描述】:

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

之前:

'TBBT - Season 06 Episode 09 - The Parking Spot Escalation.mkv'

之后:'TBBT - S06E09 - The Parking Spot Escalation.mkv'

我想一键重命名完整的节目,所以基本上我正在尝试更改

“季节”到“S”和“剧集”到“E”

这是我尝试过的:

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

首先尝试用下划线替换空格,我只得到了一些混淆结果: 'TBBT_-_Season_06_Episode_09_-_The_Parking_S0ot_E0calation'

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

【问题讨论】:

  • 您必须使用批处理还是 Python 方法也适合您?
  • 取决于理解 Python 方法的难易程度。直到现在我才使用 python,所以这对我来说是全新的。

标签: batch-file batch-rename


【解决方案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')}

【讨论】:

  • 为了简化它,我使用了一个 txt 文件:Set "Pattern1=old text " Set "Replace1=new text" For %%# in ("C:\Users\XRAY\Desktop\Batch\Test\t2\*.txt") Do ( Set "File=%%~nx#" Ren "%%#" "!File:%Pattern1%=%Replace1%!" ) 我收到错误消息:'存在重复的文件名,或者找不到文件'。 PowerShell 方法有效,但不适用于子文件夹。
  • @XRAY 尝试使用递归编辑的 powershell 命令 - 首先在文件副本上执行此操作作为测试。
  • equinox93:您的批处理代码缺少延迟扩展,但需要说明所有 ! 字符都会导致失败 - 这是标题中的常见字符。
【解决方案2】:

由于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 将重命名找到的文件。

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 2016-09-11
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多