尝试组织一个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) - 巨人星球”
答案 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"
)
)