1

我正在尝试同时启动特定数量的同一批处理文件,但在传递参数时遇到了麻烦。

这是我使用的命令: START "Split lossless enc %%G" "%wrkdir%_menc.bat" "%wrkdir%%avs%_%%G.avs" "%wrkdir%%outf%_%%G.avi" "%menc%" "%mencx%"

%%G 是一个数字(在我的测试中从 1 到 4)
%wrkdir% 是当前工作目录(所以基本上是 %~dp0)
%avs% 和 %outf% 都是没有扩展名的文件名
%menc% 是一个带文件名的完整路径并且扩展名
%mencx% 是带有扩展名的文件名

其中任何一个都可能包含空格,但它们在我所做的测试中没有,因此删除参数的周围引号现在可以完美地工作。

在我完成所有搜索之后,一切都告诉我只需引用参数就可以了,但我不断收到以下错误:The filename, directory name, or volume label syntax is incorrect.

我尝试不使用启动的 bat 文件中的参数来确保不是我在那里使用它的方式导致了问题(尽管我非常怀疑它),但即使它只包含它也不起作用ECHO it works

编辑:我忘了说 START 在从 1 到 4 的 FOR 循环中,并且我使用 setlocal enableDelayedExpansion 但我使用的所有变量都设置在它之前(显然属于 FOR 的 %%G 除外)并且在循环之外

Edit2:为了更容易,我已经将批处理文件剥离到最低限度(我对其进行了测试以确保我得到相同的错误)所以我可以给你整个事情:

@ECHO off

SET wrkdir=%~dp0
SET avs=encode-01
SET menc=D:\_1enc_\_Tools\Mencoder\mencoder_r32198.exe
SET outf=test_mt
SET inst=4

SET mencx=%menc%
:FindMencx
IF NOT "%mencx:*\=%"=="%mencx%" (
  SET "mencx=%mencx:*\=%"
  GOTO FindMencx
)

FOR /L %%G IN (1,1,%inst%) DO (
 START "Split lossless enc %%G" "%wrkdir%_menc.bat" "%wrkdir%%avs%_%%G.avs" "%wrkdir%%outf%_%%G.avi" "%menc%" "%mencx%"
)
4

2 回答 2

1

如果没有看到带有循环的整个批处理文件,for我只能猜测,但尝试添加一个空白标题start,如果没有它,当参数有空格时可能会导致问题。

START "" "分割无损编码 %%G" "%wrkdir% menc.bat" "%wrkdir%%avs% %%G.avs" "%wrkdir%%outf%_%%G.avi" "%menc% " "%mencx%"

于 2012-10-05T18:49:05.430 回答
0

经过大量的试验和错误,当要启动的 bat 文件也被引用并包含自己的路径时,似乎 START 命令不适用于引用的参数。

为了解决这个问题,我必须使用 /D 选项(我以前从未注意到存在)设置启动目录,如下所示:

START "Split lossless enc %%G" /D"%wrkdir%" "_menc.bat" "%wrkdir%%avs%_%%G.avs" "%wrkdir%%outf%_%%G.avi" "%menc%" "%mencx%"

我还发现当我输入错误的路径时会显示相同的错误,因此似乎由于某种原因无法正确看到它。不知道为什么它可以在没有参数的引号或不带引号的引号中使用路径和 bat 文件。

编辑:在我的完整批处理文件中包含修复后,我意识到如果启动的批处理文件与当前批处理文件位于同一目录中,则不能用引号括起来,但如果它位于另一个漂亮的目录中,则可以诡异的。因此,要从同一目录启动它,我需要使用_menc.bat而不是"_menc.bat".

至少它在没有引用的情况下在这两种情况下都有效,所以这对我来说已经足够了。

于 2012-10-06T02:45:40.230 回答