技术解析

怎么使用脚本批量重命名这类文件名
0
2021-06-29 10:46:34
idczone
原始文件名如:
S01E01.Pilot.ass
S01E01.Pilot.mkv
S01E02.The.Big.Bran.Hypothesis.ass
S01E02.The.Big.Bran.Hypothesis.mkv
S01E03.The.Fuzzy.Boots.Corollary.ass
S01E03.The.Fuzzy.Boots.Corollary.mkv
S01E04.The.Luminous.Fish.Effect.ass
S01E04.The.Luminous.Fish.Effect.mkv
S01E05.The.Hamburger.Postulate.ass
S01E05.The.Hamburger.Postulate.mkv

重命名成下面这种格式:
The Big Bang Theory - S01E12 - Pilot.mkv
或者:
The Big Bang Theory - S01E12.mkv

是的没错,为了在 Plex 中能自动识别封面
/TV Shows
/Grey's Anatomy
/Season 01
Grey's Anatomy - s01e01.avi
Grey's Anatomy - s01e02 - The First Cut is the Deepest.avi
Grey's Anatomy - s01e03.mp4
/Season 02
Grey's Anatomy - s02e01.avi
Grey's Anatomy - s02e02.mkv
Grey's Anatomy - s02e03.m4v

除了编程,想了好久也不知道怎么使用几行脚本解决...
或者的那个比较简单,文件名切分 awk 处理出来新文件名,然后 mv 一下就好了
想了下,几行搞定了

有现成带 gui 的工具,为什么一定要用脚本呢.....

for n in *.mkv; do e=$(echo $n | awk -F. '{print $1}'); d=$(printf "The Big Bang Theory - %s.mkv" $e); mv "$n" "$d"; done

因为是在一台无显示器的服务器里

```powershell
$regex = [regex]::new('^(.*?)\.(.*)\.(.*?)$')
Get-ChildItem | ForEach-Object {
$match = $regex.Match($_.Name);
$_ | Rename-Item -NewName "The Big Bang Theory - $($match.Groups[1].Value) - $($match.Groups[2].Value.Replace('.', ' ')).$($match.Groups[3].Value)"
}
```

为什么工具一定要跑在服务器里呢?开个 SMB,在 PC 上改名不久行了?速度虽然慢点,但是我想你也没有那么多文件吧?

有更好的解决方法为啥要这么折腾呢

说真的,我觉得普通脚本语言解决不了这个问题,因为这个问题最大的坑在于排序问题,万一脚本是个二逼排序,你的东西就全乱了。你不用 gui,很多坑可能你预计不到。

推荐你用 gui 最大的好处就是能避免出现排序问题,例如你下载的电视剧种子里,同时存在 v1 版本和 v2 版本怎么办?

totalcmd 自带此功能吧
或者自己写个正则

rename Perl 版本支持正则,但是会**覆盖同名目标文件**,即使没有加-f 参数。下例将输出 1:
```echo 1 > test1 ; echo 2 > test2 ; rename s/test1/test2/ test1 ; cat test2```

看你的需求只能需要用正则匹配出来 替换就行了。。
```
MAIN(*@files) {
for -> $_ is copy {
my $sn = $_;
s/^
(S\d+E\d+)
\.
([ <-[\.]>+ ]+ % \.)
\.
(.*)
$/$0 - {$_ = $1; tr/\./ /; $_}.$2/;
my $status = rename($sn, $_);
say "rename \[$status\]: {$sn} => {$_}";
}
}
```
以下是效果,你的 The Big Bang Theory 我没加,不知道这是不是符合你的要求。。
$ ./rename.p6 *.ass *.mkv
rename [True]: S01E01.Pilot.ass => S01E01 - Pilot.ass
rename [True]: S01E02.The.Big.Bran.Hypothesis.ass => S01E02 - The Big Bran Hypothesis.ass
rename [True]: S01E03.The.Fuzzy.Boots.Corollary.ass => S01E03 - The Fuzzy Boots Corollary.ass
rename [True]: S01E04.The.Luminous.Fish.Effect.ass => S01E04 - The Luminous Fish Effect.ass
rename [True]: S01E05.The.Hamburger.Postulate.ass => S01E05 - The Hamburger Postulate.ass
rename [True]: S01E01.Pilot.mkv => S01E01 - Pilot.mkv
rename [True]: S01E02.The.Big.Bran.Hypothesis.mkv => S01E02 - The Big Bran Hypothesis.mkv
rename [True]: S01E03.The.Fuzzy.Boots.Corollary.mkv => S01E03 - The Fuzzy Boots Corollary.mkv
rename [True]: S01E04.The.Luminous.Fish.Effect.mkv => S01E04 - The Luminous Fish Effect.mkv
rename [True]: S01E05.The.Hamburger.Postulate.mkv => S01E05 - The Hamburger Postulate.mkv

提个醒,不要因为 bug,导致目标文件都变成一样的。。。到时候欲哭无泪

听起来好像有个故事

上古神器 awk 就是为此而生啊

文件少最简单还是 totalcmd

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服