批处理命令将文件名从“The Kids Performances (2020).mp4”重命名为“Kids Performances, The (2020).mp4”

批处理命令将文件名从“The Kids Performances (2020).mp4”重命名为“Kids Performances, The (2020).mp4”

我家多年来一直保存着孩子们在校表现和课外活动的记录,主要保存为.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 来实现此目的:

  1. 打开 cmd 提示符并导航到要重命名的文件的文件夹。
  2. 使用将文件名列表复制到剪贴板 dir /b | clip(或者dir /b /s | clip如果文件保存在子目录中)并将其粘贴到 Excel 中。
  3. 使用您需要的任何公式将新文件名保存到另一列。如果您无法完全自动完成此操作,您可以随时在必要时手动调整结果。
  4. 对新文件名满意后,创建一个 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"
  1. 选择包含计算命令的单元格(在上面的例子中为 G3:G5)并将其复制放入剪贴板,然后在命令提示符窗口中单击鼠标右键(您可能需要在最后一行按 Enter 键)或将剪贴板内容粘贴到空的 *.cmd 或 *.bat 文件中,将其保存到要重命名的文件的文件夹中并运行它。

相关内容