我家多年来一直保存着孩子们在校表现和课外活动的记录,主要保存为.avi
和.mp4
文件。我被要求把所有这些文件(有一百多个)重新标记所有以The
或开头的视频,A
并将其移到末尾。
例如,标题为 的视频The Kids Performances (2020).mp4
将被更改为Kids Performances, The (2020).mp4
。我不知道他们为什么要保留The
标题中的单词和“A”,但他们确实这么做了。
我使用的是 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 个字符移到标题末尾的年份之前。我恳求我的家人将这些词从标题中完全删除,但我无法说服他们。
如果这能提供一种更简单的方法来实现这一目标,我也在 PC 上安装了 Python。在此先感谢所有能提供帮助的人!
答案1
电源外壳具有易于扩展的文章列表和扩展列表(我们可以使用-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
这不是 Keith Miller 发布的那样的自动化解决方案,但是作为编写了足够多的 cmd 脚本的人,我知道我不想再编写另一个脚本,因此我会使用 Excel 来实现此目的:
- 打开 cmd 提示符并导航到要重命名的文件的文件夹。
- 使用将文件名列表复制到剪贴板
dir /b | clip
(或者dir /b /s | clip
如果文件保存在子目录中)并将其粘贴到 Excel 中。 - 使用您需要的任何公式将新文件名保存到另一列。如果您无法完全自动完成此操作,您可以随时在必要时手动调整结果。
- 对新文件名满意后,创建一个 Excel 公式来逐个重命名文件。此时,工作表可能类似于:
A | 乙 | C | 德 | 埃 | F | G | |
---|---|---|---|---|---|---|---|
1 | 公式: | ||||||
2 | 原始文件名 | 字首 | 年 | 扩大 | 文件名的其余部分 | 新文件名 | 命令 |
3 | 儿童表演 (2018).avi | =IF(OR(UPPER(LEFT(A3;2))="A ";UPPER(LEFT(A3;4))="THE ");LEFT(A3;FIND(" ";A3)-1);"") | =MID(A3;FIND("(";A3)+1;4) | =RIGHT(A3;3) | =MID(A3;IF(B3="";1;LEN(B3)+2);LEN(A3)-LEN(B3)-LEN(C3)-LEN(D3)-IF(B3="";4;5)) | =E3&IF(B3="";"";", "&B3)&" ("&C3&")."&D3 | ="ren """&A3&""" """&F3&"""" |
4 | 一些孩子的表演 (2019).mkv | =IF(OR(UPPER(LEFT(A4;2))="A ";UPPER(LEFT(A4;4))="THE ");LEFT(A4;FIND(" ";A4)-1);"") | =MID(A4;FIND("(";A4)+1;4) | =RIGHT(A4;3) | =MID(A4;IF(B4="";1;LEN(B4)+2);LEN(A4)-LEN(B4)-LEN(C4)-LEN(D4)-IF(B4="";4;5)) | =E4&IF(B4="";"";", "&B4)&" ("&C4&")."&D4 | ="ren """&A4&""" """&F4&"""" |
5 | 儿童表演 (2020).mp4 | =IF(OR(UPPER(LEFT(A5;2))="A ";UPPER(LEFT(A5;4))="THE ");LEFT(A5;FIND(" ";A5)-1);"") | =MID(A5;FIND("(";A5)+1;4) | =RIGHT(A5;3) | =MID(A5;IF(B5="";1;LEN(B5)+2);LEN(A5)-LEN(B5)-LEN(C5)-LEN(D5)-IF(B5="";4;5)) | =E5&IF(B5="";"";", "&B5)&" ("&C5&")."&D5 | ="ren """&A5&""" """&F5&"""" |
1 | 值: | ||||||
2 | 原始文件名 | 字首 | 年 | 扩大 | 文件名的其余部分 | 新文件名 | 命令 |
3 | 儿童表演 (2018).avi | A | 2018 | AVI | 儿童表演 | 儿童表演,A(2018).avi | ren "A Kids Performance (2018).avi" "Kids Performance, A (2018).avi" |
4 | 一些孩子的表演 (2019).mkv | 2019 | 影片 | 一些孩子的表演 | 一些孩子的表演 (2019).mkv | ren "一些孩子的表演 (2019).mkv" "一些孩子的表演 (2019).mkv" | |
5 | 儿童表演 (2020).mp4 | 这 | 2020 | mp4 | 儿童表演 | 儿童表演 (2020).mp4 | ren "The Kids Performances (2020).mp4" "Kids Performances, The (2020).mp4" |
- 选择包含计算命令的单元格(在上面的例子中为 G3:G5)并将其复制放入剪贴板,然后在命令提示符窗口中单击鼠标右键(您可能需要在最后一行按 Enter 键)或将剪贴板内容粘贴到空的 *.cmd 或 *.bat 文件中,将其保存到要重命名的文件的文件夹中并运行它。