将文件重命名为与目录中最大的文件相同

时间:2016-09-28 18:41:16

标签: windows powershell batch-file

我的nas上有一个电影收藏设置,我正在尝试将所有字幕文件重命名为与位于同一目录中的电影相同的名称。例如:

D:\Movies\2 Guns (2013) (Bluray)\
-2 Guns (2013).mkv
-English.srt

我想将english.srt文件重命名为:

2 Guns (2013).srt

长话短说,我无法使用任何类型的媒体管理器来实现这一目标。我希望它能成为批处理文件,但我愿意使用powershell甚至是第三方程序,只要它不是某种媒体管理器。我需要根据位于同一目录中的最大文件生成名称,而不是文件夹名称,因为其中一些文件名与文件名不匹配。此外,.srt文件不会始终命名为english.srt

编辑 -

所以我想出了这个:

@echo off
setlocal enabledelayedexpansion

for /F "delims=" %%A in ('dir /b *.mp4 *.avi *.mkv') do (
set basename="%%~nA"
ren *.srt !basename!.eng.srt
)

这很好用,但是如何才能使这个递归,所以我可以从父目录中逐个运行它?

1 个答案:

答案 0 :(得分:0)

只需将dir /b ...更改为dir /b /s ...,即可通过子目录进行递归。

您可能还需要包含重命名的完整路径。

这是整个剧本。

setlocal enabledelayedexpansion

for /F "delims=" %%A in ('dir /b /s *.mp4 *.avi *.mkv') do (
    set basename="%%~nA"
    ren "%%~dpA*.srt" "!basename!.eng.srt"
)

注意我也对ren命令进行了一些更改。

我们用引号包装名称,如果你有空格来处理。我们还使用%%dpA来阐明我们想要使用的驱动器和路径。