重命名* .nfo文件以匹配其* .mkv' s

时间:2015-03-20 22:40:19

标签: batch-file

尝试组织一个show * .nfo文件,使它们与mkv(编辑:avi woops并没有真正改变代码)的名称相同。

Test Folder:
76107.2.1.nfo 
76107.2.2.nfo
76107.2.3.nfo
Doctor Who - S02E01 (009) - Planet of Giants (1) - Planet of Giants.avi
Doctor Who - S02E01 (009) - Planet of Giants (2) - Dangerous Journey.avi
Doctor Who - S02E01 (009) - Planet of Giants (3) - Crisis.avi

现在76107.2。*。nfo中的剧集编号在以后的文件夹中是错误的,测试文件夹中的相似性只是因为它是本赛季的第一个。所以我不能简单地比较名称以匹配它们,但它们的顺序正确,所以我试图使用计数器重命名第一个* .nfo与第一个* .avi相同,然后第二个* .nfo重命名与第二个* .avi相同,等等!

我制作了一个我认为应该可行的剧本,但它什么也没做。任何帮助将非常感激! 编辑现在感谢Aacini,除了代码中注明的奇怪的错误。

@echo on
setlocal enableDelayedExpansion

set cnta=0
Set cntb=0
for %%b in (*.avi) do (
 set /a cnta=cnta+1
 set line_!cnta!=%%~Nb
)

for %%c in (*.nfo) do (
 set /a cntb=cntb+1
 for %%i in (!cntb!) do ren "%%~fc" "!line_%%i!.nfo"
)

Bug:第一个nfo似乎碰到了列表的末尾,但它的位置仍然存在。正如在每个其他nfo被命名为匹配其适当的avi。

Test 1 (Original Test Folder) Results:
.nfo
Doctor Who - S02E01 (009) - Planet of Giants (1) - Planet of Giants.avi
Doctor Who - S02E01 (009) - Planet of Giants (2) - Dangerous Journey.avi
Doctor Who - S02E01 (009) - Planet of Giants (2) - Dangerous Journey.nfo
Doctor Who - S02E01 (009) - Planet of Giants (3) - Crisis.avi
Doctor Who - S02E01 (009) - Planet of Giants (3) - Crisis.nfo

Test 2 (Added Extra Bonus File) Results:
Doctor Who - S02E01 (009) - Planet of Giants (1) - Planet of Giants.avi
Doctor Who - S02E01 (009) - Planet of Giants (2) - Dangerous Journey.avi
Doctor Who - S02E01 (009) - Planet of Giants (2) - Dangerous Journey.nfo
Doctor Who - S02E01 (009) - Planet of Giants (3) - Crisis.avi
Doctor Who - S02E01 (009) - Planet of Giants (3) - Crisis.nfo
Doctor Who - S02E01 (009) - Planet of Giants (4) - The Making of Planet of Giants.avi
Doctor Who - S02E01 (009) - Planet of Giants (4) - The Making of Planet of Giants.nfo

有些文件夹会在列表末尾包含奖励视频,这些视频没有匹配的nfo,但它们总是在最后。我读了nfo's只验证“.nfo”(测试1)/“神秘博士 - S02E01(009) - 巨人星球(4) - 巨人星球的制作”(测试2)是错误的他们应该“神秘博士 - S02E01(009) - 巨人星球(1) - 巨人星球”

3 个答案:

答案 0 :(得分:2)

line_!cnta!变量命名的正确术语是数组。您可以在this post处查看批处理文件中阵列管理的完整说明。例如,您的代码可能会以这种方式修复:

编辑修复了小错误

@echo on
setlocal enableDelayedExpansion

set cnta=0
Set cntb=0

for %%b in (*.mkv) do (
 set /a cnta=cnta+1
 set line_!cnta!=%%~Nb
)

for /F "delims=" %%c in ('dir /B *.nfo') do (
 set /a cntb=cntb+1
 for %%i in (!cntb!) do ren "%%~fc" "!line_%%i!.nfo"
)

答案 1 :(得分:1)

我认为这对你有用。一旦您认为正确,就应该将echo ren更改为ren

@echo on
setlocal enableDelayedExpansion

set cnta=0
set cntb=0

for %%a in (*.mkv) do (
    set /a cnta=cnta+1
    set line_!cnta!=%%a
)

for %%b in (*.nfo) do (
    set /a cntb=cntb+1
    set newname=line_!cntb!
    call set newname=%%!newname!%%
    echo ren "%%~fb" "!newname!"
)

我认为你更喜欢这样的循环。我这次实际测试了它:

@echo on
setlocal enableDelayedExpansion

set cnta=0
set cntb=0

for /f "usebackq delims=" %%a in (`dir *.mkv /a-d /b /on`) do (
    set /a cnta=cnta+1
    set line_!cnta!=%%a
)

for /f "usebackq delims=" %%b in (`dir *.nfo /a-d /b /on`) do (
    set /a cntb=cntb+1
    set newname=line_!cntb!
    call set newname=%%!newname!%%
    echo ren "%%~fb" "!newname!"
)

如果您真的对使用批处理脚本感兴趣,那么在它真正开始点击之前,您需要很多耐心和反复试验。它可能非常错综复杂。

答案 2 :(得分:1)

由于您似乎在寻找替代方案,每个.nfo文件是否都包含其对应的.mkv文件的名称?如果是这样,您可以使用find和条件执行将.mkv与其.nfo配对.nfo的内容。这比shawn和Aacini的答案要差得多(很多!),但至少你不必担心文件是否按顺序排列。

@echo off
setlocal

for %%I in (*.mkv) do (
    for %%x in (76107*.nfo) do if not exist "%%~nI.nfo" (
        find /i "%%~nxI" "%%x" >NUL && ren "%%x" "%%~nI.nfo"
    )
)