[英]How to pass parameters with spaces contained in variables using START in a batch file
我试图同时启动特定数量的相同批处理文件,但无法传递参数。
这是我使用的命令: 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,但是我使用的所有变量都已设置在它之前(%% G显然属于FOR)并且在循环之外
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%"
)
我只能猜测,没有看到带有for
循环的整个批处理文件,但是尝试在start
后添加一个空白标题,如果没有空白标题,则在参数包含空格时会引起问题。
START“”“拆分无损enc %% G”“%wrkdir% menc.bat”“%wrkdir %% avs %%% G.avs”“%wrkdir %% outf%_ %% G.avi”“%menc% “”%mencx%“
经过大量的试验和错误之后,当要启动的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"
。
至少在没有引用的情况下,它在两种情况下都有效,对我来说已经足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.