tmpFile f-6ren">
gpt4 book ai didi

Windows 命令在 cmd 中工作但不在 .bat 文件中工作

转载 作者:可可西里 更新时间:2023-11-01 11:50:38 25 4
gpt4 key购买 nike

你好,我正在尝试创建用于从目录中的所有 .mkv 文件中提取字幕的 Windows 脚本,但我遇到了问题。

这是我的脚本:

dir /b | findstr .*".mkv"$ > tmpFile
for /f "tokens=*" %f in (tmpFile) do start mkvextract.exe tracks %f 2:%~nf.ass
del tmpFile

问题是,当我在 cmd.exe 中执行它时,一切正常,但是当我将它包装在 .bat 文件中时,只能执行第一行和第三行。

对于说这个错误的行

C:\test>dir /b   | findstr .*".mkv"$  1>tmpFile
The following usage of the path operator in batch-parameter
substitution is invalid: %~nf.ass

For valid formats type CALL /? or FOR /?
The syntax of the command is incorrect.

C:\test>for /f "tokens=*" f 2:n (tmpFile) do start
mkvextract.exe tracks %f 2:%~nf.ass

我正在尝试更改脚本来修复错误,但我唯一实现的是即使在命令行中也停止工作。请帮忙。 :)

最佳答案

您的代码的问题是,当命令放在批处理文件中时,您必须将百分号加倍,正如 npocmaka 在他的回答中指出的那样。但是,我想稍微分析一下您的代码。在这一行中:

dir /b | findstr .*".mkv"$ > tmpFile

dir/b 命令生成文件名列表,findstr 命令只获取以任何字符串开头并以“.mkv”结尾的名称,并且重定向将这些名称存储在“tmpFile”中。上一行的实际效果是“将扩展名为 .mkv 的文件名存储在 tmpFile 中”。 (使用 dir/b *.mkv > tmpFile 命令可能会得到相同的结果)。

第二行:

for /f "tokens=*" %f in (tmpFile) do start mkvextract.exe tracks %f 2:%~nf.ass

处理以前的名称并为每个名称执行一个 start ... 命令。最终效果是“对每个扩展名为 .mkv 的文件执行 start ... 命令”。最后一行:

del tmpFile

只删除辅助文件。

使用此命令您可能会得到与前三行相同的结果:

for %f in (*.mkv) do start mkvextract.exe tracks %f 2:%~nf.ass

如果你想把以前的命令放在批处理文件中,只需将百分号加倍:

for %%f in (*.mkv) do start mkvextract.exe tracks %%f 2:%%~nf.ass

关于Windows 命令在 cmd 中工作但不在 .bat 文件中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com