Batch file 如何让两个变量在批处理命令中同时用于工作?

Batch file 如何让两个变量在批处理命令中同时用于工作?,batch-file,mkv,Batch File,Mkv,我正在使用mkvmerge从多个文件中提取音频。进行此操作时,我希望重命名提取的文件,以便以后更容易合并它们 我现在的命令是 for /f "delims=" %%A IN ('dir /b *.mkv') DO mkvextract tracks "%%A" 2:F:\%%~nA.ogg 它从文件中提取音频,比如说“x1.mkv”到“x1.ogg” 我要做的是,将音频文件(x1.ogg)重命名为另一个文件夹中另一个文件的名称。 有点像这个命令(我知道这是错误的,我试图告诉你我想要实现什么):

我正在使用mkvmerge从多个文件中提取音频。进行此操作时,我希望重命名提取的文件,以便以后更容易合并它们

我现在的命令是

for /f "delims=" %%A IN ('dir /b *.mkv') DO mkvextract tracks "%%A" 2:F:\%%~nA.ogg
它从文件中提取音频,比如说“x1.mkv”到“x1.ogg”

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

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

因此,

x1.mkv=>y1.ogg

x2.mkv=>y2.ogg等

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

谢谢

@ECHO关闭
SETLOCAL
设置“destdir=U:\destdir”
对于/f“tokens=1*delims=:”%%A IN(
“dir/b/a-d”*.mkv“^ findstr/n/r”。”
)做(
对于/f“tokens=1*delims=:”%D IN(
“dir/b/a-d”%destdir%\*.mkv“^ findstr/n/r“。”
)如果%%A==%%D回显(mkvextract跟踪“%%B”2:F:\%%~nE.ogg,则执行此操作
)
后藤:EOF
您需要更改
destdir
的设置以适应您的环境

所需命令仅用于测试。
ECHO
ed。验证命令正确后,删除命令前出现的字符串
ECHO(
),以实际执行命令

“筛选”目录列表中包含任何字符的任何行,并使用前面的
对该行进行编号。这只会产生相同的列表,但使用前面的
进行编号

使用分隔符将每行标记为
%%A
%%B
,,使数字指向
%%A
,文件名指向
%%B


对于每个
%%A、%%B
,对另一个目录执行相同的操作,这一次生成
%%D、%%E
,然后如果行号匹配,则从变量中选择适当的元素执行命令。

名称格式是否总是x和y后跟数字?这些文件夹中的文件数是否相同?否格式完全相同。名称不同,但文件数完全相同。您如何知道如何将不同的名称配对?无所谓(随机)?按字母顺序排序?按日期排序?每个名称中的公共元素?按字母顺序排序。我不确定是否允许我这样做。下面是一个示例,我想从左侧部分提取音频,提取的音频文件应该与右侧部分同名,以便我以后可以使用另一批代码轻松地将其多路复用。谢谢!成功了!不幸的是,我没有我无法理解其中的大部分内容。请原谅我的愚蠢!首先,设置“sourcedir”是什么意思?你的意思是“destdir”(因为我在代码中没有看到任何sourcedir)。第二,用前面的“为行编号”:“你的意思是在source和dest Dir中将我的所有文件重命名为“1:”2:“3:”等?(我没有这样做,但仍然有效).我也不明白最后一段:(是的-
destdir
(已修复)。
dir | findstr/n/r“
将产生
dir
行,但前缀为
x1.mkv
的数字将变成
3:x1.mkv
。您已经知道
/b
dir
做了什么;
/a-d
表示“没有目录名”.
|
表示“将此命令的输出发送到下一个命令”。
findstr
上的
/n
表示“为所选行编号”;
/r“
表示“选择包含任何字符的行”。插入符号
^
告诉
cmd
,管道
|
是要执行的命令的一部分,而不是控制执行的
的一部分。外循环标记
3:x1.mkv
,以便
3
被分配给
%A
x1.mkv
%%B
。内部循环只作用于另一个目录,将行号分配给
%%D
,将名称分配给
%%e
。如果%%A=%%D,则在
%%B
中有第一个目录的第三行,在
%%e
中有第二个目录的第三行,这是必需的匹配项。
%%A
将从1运行到目录列表中的行数和
%%A
将仅在第二个目录列表中的匹配行号中等于
%%D
。因此,需要做的就是选择完整的文件名
%%B
&名称-
%%E
,以进行处理哦,谢谢!这就清除了它。令牌的帮助如此之大,真是太好了。一个d如何通过令牌自动分配变量。
for /f "delims=" %%A IN ('dir /b *.mkv') && %%B in ('dir "F:\Show" /b *.mkv') DO mkvextract tracks "%%A" 2:F:\%%~nB.ogg