String “上的批处理合成错误”;至于-陈述
我正在尝试使用批处理自动化一个小的deploymentscript。它只更新SVN回购协议,然后使用ant构建和上传。之后,它通过SSH连接到服务器,使用plink重新启动服务器。 一切正常。现在的问题是,当我试图解析Serverstats以查看相关服务器是否已备份时,我得到了一个语法错误。 以下是相关的代码片段:String “上的批处理合成错误”;至于-陈述,string,batch-file,syntax-error,String,Batch File,Syntax Error,我正在尝试使用批处理自动化一个小的deploymentscript。它只更新SVN回购协议,然后使用ant构建和上传。之后,它通过SSH连接到服务器,使用plink重新启动服务器。 一切正常。现在的问题是,当我试图解析Serverstats以查看相关服务器是否已备份时,我得到了一个语法错误。 以下是相关的代码片段: SET c=0 SET problem=false echo outer for /f "delims=" %%i in ('plink.exe -v -ssh %uID%@%ser
SET c=0
SET problem=false
echo outer
for /f "delims=" %%i in ('plink.exe -v -ssh %uID%@%serveradress% -pw %pw% %command%') do (
echo inner
if %c% GEQ 3 (
if %c% LEQ 8 (
echo(%%i|findstr /r /c:"up" >nul && (
) || (
set problem=true
)
)
)
set c+=1
)
echo %problem%
下面是这个片段的输出:
...>SET c=0
...>SET problem=false
...>echo outer
outer
")" not processable syntactically (translated from german. It probably says something else in english)
...> )||(
由于您的
&(
没有命令,因此出现语法错误。您可以使用&&(rem)
,也可以将&&
全部删除,直接转到| |(…)
但你仍然有问题。解析该行时会发生%c%
的扩展,并且整个FOR DO()循环在一次过程中被解析。因此,%c%
的值不会随着每次迭代而改变-它仍然是在您进入循环之前设置的常量值0
您可以通过使用在顶部启用延迟扩展来解决该问题
设置本地启用延迟扩展
,并使用!c代码>而不是%c%
您可以通过故意使用除零错误来查看c
是否在3-8范围内,从而避免延迟扩展
以下是:
2>nul set /a "1/((c/3)*!(c/9))" && (
rem do something
)
相当于:
if !c! geq 3 if !c! leq 8 (
rem do something
)
你能举例说明变量中的值吗?(uID、serveraddress、pw、command和string)只要看一眼,我猜其中一个变量中的一个特殊字符就是造成问题的原因。但是,您还需要为实现DelayedExpansion!c
variable并将算术标志添加到set命令set/a c+=1
唯一可以出现的特殊字符是用户名中的#。那会是个问题吗?