如何在批处理命令中同时使用 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 .
我正在使用 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 .