引用逗号分隔参数结果“命令的语法不正确”
问题描述:
我已经花了几个小时来回,并且我退出了!我只是想从命令行读取参数。在我将双引号和逗号分隔符引入命令行调用之前,这一切都正常工作。虽然我认为真正的问题与这些逗号有关,但不确定发生了什么,希望有人能够提供帮助? :3引用逗号分隔参数结果“命令的语法不正确”
命令行是这样的:
deploy.bat -pom=ui\main.pom -hostPassword=test1234 -hostInstances="myserver1.subdomain.com:150,myserver2.subdomain.com:151,myserver3.subdomain.com:153" -uploadAndInstall -useTargetBuild
然后在批处理文件我有一个部分来读取参数和调用一个函数来传递KEY/VAL对成用于设定变量(如果任何人都知道这更好的办法,请:)
rem parse all passed arguments
:ARGS
SET KEY=%1
SET VAL=%2
ECHO TRYING %KEY%=%VAL%
IF [%KEY%]==[] GOTO ARGE
ECHO HAVETOKEN
ECHO %KEY:~0,1%E
IF "%KEY:~0,1%"=="-" (
ECHO HAVEKEY
IF [%VAL%]==[] (
ECHO NOVAL
CALL :EARG %KEY% TRUE
) ELSE (
IF "%VAL:~0,1%"=="-" (
ECHO HAVEKEYNEXT
CALL :EARG %KEY% TRUE
) ELSE (
ECHO HAVEVAL
CALL :EARG %KEY% %VAL%
SHIFT /1
)
)
)
SHIFT /1
GOTO ARGS
:ARGE
的ECHO
基本上都是我的这个调试;所以让我复制/粘贴的输出,你会看到它在越来越挂断:
TRYING -pom=ui\main.pom
HAVETOKEN
-E
HAVEKEY
HAVEVAL
-pom ui\main.pom
TRYING -hostPassword=test1234
HAVETOKEN
-E
HAVEKEY
HAVEVAL
-hostPassword test1234
TRYING -hostInstances="myserver1.subdomain.com:150,myserver2.subdomain.com:151,myserver3.subdomain.com:153"
HAVETOKEN
-E
The syntax of the command is incorrect.
因此,大家可以看到它知道-hostInstances
是存在的,但它甚至不会跑这条线的代码(尽管上面的线是相同的)IF "%KEY:~0,1%"=="-" (
答
- 它的问题总是正确引用。
- 由于子
:EArg
缺失,我插入了一个用下划线前置键的键以减轻输出。
@Echo off
rem parse all passed arguments
:ARGS
SET "KEY=%~1"
SET "VAL=%~2"
IF "%KEY%"=="" GOTO ARGE
ECHO TRYING %KEY%=%VAL%
ECHO HAVETOKEN %KEY:~0,1%E
IF "%KEY:~0,1%"=="-" (
ECHO HAVEKEY %KEY:~1%
IF "%VAL%"=="" (
ECHO NOVAL
CALL :EARG "%KEY:~1%" TRUE
) ELSE (
IF "%VAL:~0,1%"=="-" (
ECHO HAVEKEYNEXT %VAL%
CALL :EARG "%KEY:~1%" TRUE
) ELSE (
ECHO HAVEVAL %VAL%
CALL :EARG "%KEY:~1%" "%VAL%"
SHIFT /1
)
)
)
SHIFT /1
GOTO ARGS
:EArg
Set "_%~1=%~2"
Goto :EOF
:ARGE
Set _
输出示例:
> deploy.bat -pom=ui\main.pom -hostPassword=test1234 -hostInstances="myserver1.subdomain.com:150,myserver2.subdomain.com:151,myserver3.subdomain.com:153" -uploadAndInstall -useTargetBuild
TRYING -pom=ui\main.pom
HAVETOKEN -E
HAVEKEY pom
HAVEVAL ui\main.pom
TRYING -hostPassword=test1234
HAVETOKEN -E
HAVEKEY hostPassword
HAVEVAL test1234
TRYING -hostInstances=myserver1.subdomain.com:150,myserver2.subdomain.com:151,myserver3.subdomain.com:153
HAVETOKEN -E
HAVEKEY hostInstances
HAVEVAL myserver1.subdomain.com:150,myserver2.subdomain.com:151,myserver3.subdomain.com:153
TRYING -uploadAndInstall=-useTargetBuild
HAVETOKEN -E
HAVEKEY uploadAndInstall
HAVEKEYNEXT -useTargetBuild
TRYING -useTargetBuild=
HAVETOKEN -E
HAVEKEY useTargetBuild
NOVAL
_hostInstances=myserver1.subdomain.com:150,myserver2.subdomain.com:151,myserver3.subdomain.com:153
_hostPassword=test1234
_pom=ui\main.pom
_uploadAndInstall=TRUE
_useTargetBuild=TRUE
哇,谢谢;如何知道何时将引号放在完整的变量和赋值中?或者应该总是这样做? – nuebKitsune
为了避免尾随的空格和由有害字符引起的断裂 - 是的。如果在var中有空格,用'[]'括起来的操作数也无济于事,所以尽可能使用双引号。与hostinstances的调用需要引用,因为','会分成几个参数。 – LotPings