我正在尝试编写一个批处理文件,以简化WebService存根的生成。问题在于SET
变量的命令之一未设置该值。我尝试了各种方法来兑现这一点,SET
但无济于事。显然缺少明显的东西。脚本的其余部分工作正常。
IF %1==-b (
ECHO %2
SET BINDINGS_FILE=%2
SHIFT & SHIFT
ECHO File: %BINDINGS_FILE%
IF EXIST "%BINDINGS_FILE%" (
SET BINDINGS=-b %BINDINGS_FILE%
) ELSE (
ECHO Please enter a valid Bindings file name: %BINDINGS_FILE%.
GOTO DONE
)
ECHO BINDINGS = %BINDINGS%
)
当我使用以下命令执行它时,它会将绑定文件打印为,%2
但是它所获取的变量SET
仍然为空。
generate-stubs.bat -b wsdl/Binding.xml -p com.acme.service wsdl/WebService.wsdl
wsdl/Binding.xml
File:
Please enter a valid Bindings file name: .
Done!
任何建议表示赞赏。
批处理文件正在将变量设置为指示的值。但是您没有看到它。
在批处理文件中,行被解析,然后执行。逐行或逐块(用括号括起来的行)。当解析器到达一行或一行块时,在读取变量的所有点上,对该变量的引用都将被删除,并在开始执行该块之前用变量中的值替换。因此,如果变量在块内更改其值,则从同一块内将无法访问该新值。执行的内容不包含对变量的引用,而是在解析代码时变量中的值。
要更改此行为,并能够从更改值的同一块内部读取变量的更改值,则需要延迟扩展。
启用延迟扩展后,可以在需要时将访问/读取变量的语法从更改%var%
为!var!
。这指示解析器不要执行初始替换,并延迟对值的访问,直到执行命令为止。
因此,您的代码可以像
setlocal enabledelayedexpansion
IF "%1"=="-b" (
ECHO %2
SET "BINDINGS_FILE=%~2"
SHIFT & SHIFT
ECHO File: !BINDINGS_FILE!
IF EXIST "!BINDINGS_FILE!" (
SET "BINDINGS=-b !BINDINGS_FILE!"
) ELSE (
ECHO Please enter a valid Bindings file name: !BINDINGS_FILE!.
GOTO DONE
)
ECHO BINDINGS = !BINDINGS!
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句