2014-09-29 75 views
0

我有一个接收一些参数的CMD脚本。它被称为是这样的:将一些位置参数传递给CMD中的子命令

C:\myscript -A value -B value -C value -D -E -F value path1 path2 path3 

它可能会收到多个选项型参数(并不总是相同的号码,可能是没有;有的用参数,有些没有)和几个路径类型参数(并不总是相同数量,但总是至少有一个)。这不是一个可以改变的选项,因为它被我无法控制的程序调用。

的MyScript必须只提取路径型参数,并将它们传递到其子命令之一,例如:

@echo off 
rem this is C:\myscript 
C:\otherscript path1 path2 path3 

我不能使用编号等%1%2或%3,因为我的位置参数事先不知道会有多少个选项类型参数,也没有多少路径类型选项。

+0

路径类型的实际示例将有所帮助。相对的,UNC,明确的路径 - 这一切都很重要。 – foxidrive 2014-09-29 15:15:23

+0

任何路径均有效。只有确定的是,它们都是在所有选项之后出现的。 – Envite 2014-09-29 16:11:45

+0

然后在参数中搜索\。 – foxidrive 2014-09-29 17:03:18

回答

0

经过一段时间的这个问题,并感谢s从Torqane的回答中得知,我开发了一个可以工作的脚本:

SET SAVEPATH= 

:loop 
SET var1=%1 
SET VAR1NOQUOTE=%~1 
SET VAR1FIRST=%VAR1NOQUOTE:~0,1% 

if "%VAR1NOQUOTE%"=="" goto continue 

rem test known no-argument options 
if "%VAR1NOQUOTE%"="-A" goto shift1 
if "%VAR1NOQUOTE%"="-B" goto shift1 
rem etc... as many as needed 

rem test options with arguments 
if "%VAR1FIRST%"="-" goto shift2 

rem if not an aption, it is a path 
SET SAVEPATH=%SAVEPATH% %VAR1% 
shift 
goto loop 

:shift1 
shift 
goto loop 

:shift2 
shift 
shift 
goto loop 

:continue 
C:\otherscript %SAVEPATH% 
0

还有其他的好处是路径可以显示在命令行的任何地方,而不仅仅是在最后。根据你的例子假设,每个选项及其紧随其后的参数都被忽略,而没有前面选项的任何东西都是你想要在调用中使用的路径。

@echo off 
rem this is C:\myscript too :) 
rem do this so it's repeatable, or use setlocal/endlocal 

set parmlist= 

:loop 
set parm=%1 
if '%parm:~0,1%'=='-' goto option 
set parmlist=%parmlist% %parm% 
shift 
if '%1'=='' goto done 
goto loop 

:option 
shift 
if '%1'=='' goto done 
set parm=%1 
if not '%parm:~0,1%'=='-' shift 
if not '%1'=='' goto loop 

:done 
c:\otherscript %parmlist% 

使用此命令行测试:

myscript -a fred -b wilma firstpath -c -d barney secondpath thirdpath 

结果:

c:\otherscript firstpath secondpath thirdpath 

(是的,有一个额外的空间存在,但它更易于阅读不混搭otherscript%parmlist%一起向右)

+0

我喜欢它,但它不会帮助您在上面使用类似-E的非参数选项由一条路径。无论如何,它给了我想法。 – Envite 2014-09-30 07:08:26

+0

好的。我不太喜欢goto的东西,但它的工作方式如上所述。嵌套的条件是错误的,但编辑的答案应该做你现在正在寻找的东西。 – Torqane 2014-10-01 07:19:20

+0

对myscript.bat不起作用-a fred -b wilma第一路径-c第二路径-d barney第三路径 – Envite 2014-10-01 08:02:53