根据部分文件夹中的部分文件名匹配,重命名文件名的子字符串

PresidioSF

我有一个充满文件的文件夹(.avi和.txt文件):

'MyVideo1-MyEncode.avi'
'MyVideo1.avi 16-05-2019 15-41-01.txt'

'My Video 2.avi'
'My Video 2.avi 16-05-2019 16-43-11.txt'

'My Video 3 [Summer]-MyEncode.avi'
'My Video 3 [Summer].avi 16-05-2019 17-57-24.txt'

'My Video 4-(Fall).avi'
'My Video 4-(Fall).avi 13-05-2019 19-29-16.txt'

'My Video 5-(Winter)-MyEncode.avi'
'My Video 5-(Winter).avi 11-05-2019 11-15-05.txt'

如果.avi文件的文件名中包含“ -MyEncode”,那么我想将字符串的这一部分复制到相应文本文件的文件名中。

例如

“ MyVideo1-MyEncode.avi 在文件名中包含文本“ -MyEncode”

因此:“ MyVideo1.avi 16-05-2019 15-41-01.txt”

应该重命名为:“ MyVideo1-MyEncode.avi 16-05-2019 15-41-01.txt”

另一方面:

“我的视频2.avi” 包含字符串“ -MyEncode”,因此不应重命名相应的.txt文件。

我有许多包含此类文件的文件夹。

我想我需要运行cmd行或批处理文件来执行以下操作:

for /R %x in (*.avi) do ren "%x" *.txt

但是,这不能解决部分文件名匹配的问题。

谁能帮忙吗?

PS-如果我使事情变得容易,则可以将“我的视频3 [Summer] -MyEncode.avi”重命名为“ My_Video_3_ [Summer] -MyEncode.avi”(即删除空格)

梅尔

自从将-MyEncode文件名放在文件名的中间以来,这最终成为了我的麻烦,但这是我想出的,它可以根据您提供的信息进行工作:

@echo off

set "dir=C:\Your\Directory"
set "enc=-MyEncode"

setlocal EnableDelayedExpansion
for /r "%dir%" %%A in ("*%enc%*.avi") do (
    set "sub=%%~nxA"
    set "name=!sub:~0,-13!"
    for /r "%dir%" %%B in ("*!name!*.txt") do (
        set "txt=%%~nxB"
        set "num=!txt:~-24!"
        set "fin=!name!!enc!.avi!num!"
        if not !txt!==!fin! ren "%dir%\!txt!" "!fin!"
    )
)
endlocal

对于初学者来说,这setlocal EnableDelayedExpansion是必需的,因为我们要处理整个嵌套for循环中使用的变量。这些变量用于使事情更容易理解,并且在您进行回退和编辑时进行更改,因此在前面,我已经为文件所在的目录(dir)和要插入的字符串设置了变量到您的文件名(enc)中。

初始的for循环检查目录中是否包含字符串的.avi文件的所有实例-MyEncode,并且对于每个实例/迭代,%%A返回一个参数并将其用于do其他一些命令。初始循环中的第一个命令设置变量(sub)以及参数的文件名(n)和扩展名(x%%A-因为我们不需要它,所以它会切断所有目录信息。第二个命令使用我们的新sub变量设置一个新变量(name),该变量从文件名中减去最后13个字符(最后13个字符为-MyEncode.avi),因此我们可以将其用于下一部分:嵌套的for循环。

像最初的for循环一样,我们的嵌套目录会在目录中查找-但enc与其查找包含我们变量的.avi文件,不如查找包含我们新name变量的.txt文件设置txt变量的第一个命令是将%%B缩减为文件名和扩展名,然后我们设置一个num变量,将txt缩减为最后24个字符(末尾的数字和空格)。最后,它的变量fin是什么,我们要叫新文本文件:!name!!enc!.avi!num!-这是建立在初始for循环的名称-MyEncode添加到它,一个.avi加入到这一点,那么那名原本在年底的数字。从这里开始,我们使用if not命令说:txt尚未与之fin对应的变量,请将重命名txtfinif not在这里使用是因为已经更改了文本文件以反映其相应的.avi文件,因此无需再次重命名。

希望这会有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据同一文件夹中的部分文件名匹配重命名文件名的子字符串

拆分字符串以提取部分文件名

尝试重命名文件夹中的文件(基于文件名中的字符串)

如何匹配文件名中的字符串并根据字符串重命名文件?

使用Windows Batch脚本在文件夹中多个文件中的一部分文件名中查找并替换字符串

批量创建文件夹并根据部分文件名重定位文件

通过提取与模式匹配的部分文件名来重命名文件

根据部分文件名批量创建文件夹并将文件移动到文件夹

如何使用匹配的字符串递归重命名文件夹名和文件名

Powershell 更改文件夹内一个子文件夹(副文件夹名称)中的部分文件名

如何从列表中递归重命名一部分文件名?

根据部分文件名创建文件夹,然后将文件移动到创建的文件夹中

根据部分文件名和部分单元格内容自动重命名工作表

如何根据部分文件名读取excel文件

根据部分文件名打开多个Excel文件

如何根据文件名部分将文件分类到子文件夹中?

交换部分文件名

找到部分文件名mlocate

从部分文件中查找完整的文件名

如何重命名文件夹中的文件名?

重命名文件夹中的文件名

根据文件名的子字符串创建文件夹

如何将文件重命名为文件名中的子字符串?

重命名与模式匹配的文件名部分

Python:根据部分文件名获取完整的文件名

将部分文件名与完整文件名匹配

将所有文件移动到以部分文件名命名的子目录中

文件夹或文件名中的Glob模式匹配字符串

在Linux脚本中调用部分文件名