繁体   English   中英

如何在批处理文件中使用START传递变量中包含空格的参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM