如何在批处理命令中同时使用 FOR 的 2 个变量?

How to Have 2 variables using FOR work simultaneously in batch command?

我正在使用 mkvmerge 从多个文件中提取音频。这样做时,我想重命名提取的文件,以便以后更容易合并它们。

我现在的命令是

for /f "delims=" %%A IN ('dir /b *.mkv') DO mkvextract tracks "%%A" 2:F:\%%~nA.ogg

从文件中提取音频 "x1.mkv" 到 "x1.ogg"

我想做的是,将音频文件 (x1.ogg) 重命名为另一个文件夹中的另一个文件的名称。 有点喜欢这个命令(我知道这是错误的,我试图告诉我想要实现的目标):

for /f "delims=" %%A IN ('dir /b *.mkv') && %%B in ('dir "F:\Show" /b *.mkv') DO mkvextract tracks "%%A" 2:F:\%%~nB.ogg

从我的当前目录 (%%A) 获取文件,但提取的音频将具有另一个目录 (%%B) 中相应文件的名称。

因此,

x1.mkv => y1.ogg

x2.mkv => y2.ogg 等等..

那么如何输入 FOR 命令,其中 2 个变量具有 2 个不同目录的文件名?

谢谢!

@ECHO OFF
SETLOCAL
SET "destdir=U:\destdir"
FOR /f "tokens=1*delims=:" %%A IN (
 'dir /b /a-d "*.mkv"^|findstr /n /r "." '
 ) DO (
 FOR /f "tokens=1*delims=:" %%D IN (
  'dir /b /a-d "%destdir%\*.mkv"^|findstr /n /r "." '
  ) DO IF %%A==%%D echo(mkvextract tracks "%%B" 2:F:\%%~nE.ogg
)

GOTO :EOF

您需要更改 destdir 的设置以适合您的情况。

所需命令仅ECHO用于测试目的。 确认命令正确后,删除出现在命令之前的字符串ECHO(以实际执行命令。

"filter" 目录列表中包含任何字符的任何行,并用前面的 #: 为该行编号。这具有简单地生成相同列表的效果,但编号为 #: 前面。

使用分隔符 : 将每一行标记为 %%A%%B,因此数字变为 %%A,文件名变为 %%B

With each %%A,%%B, do the same trick to the other directory, this time producing %%D,%%E, then if the line numbers match, execute your command with the appropriate selection of elements from the variables .