我正在尝试编写一个批处理文件,它将简化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%
)
Run Code Online (Sandbox Code Playgroud)
当我使用以下命令执行它时,它会打印绑定文件,%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!
Run Code Online (Sandbox Code Playgroud)
任何建议赞赏.
看起来像一个很旧的帖子,但可能会节省一些人的时间......
IF 语句括号 "(" ")" 中的所有命令都作为单个块执行。在 IF 语句块(第 2 行到第 5 行)的执行期间,变量值确实会发生更改,但更改后的值只能在当前块执行完成后使用。例如你下面的代码片段,
1 如果 %1==-b ( 2 回声 %2 3 SET BINDINGS_FILE=%2 4 移位和移位 5 回显文件:%BINDINGS_FILE% ) 6 回显 %BINDINGS_FILE%
虽然“BINDING_FLAGS”的值是在第3行设置的,但它只会在下一个块或下一个命令中生效,也就是说,第6行将显示实际值而不是第5行
批处理文件将变量设置为指示值.但你没有看到它.
在批处理文件中,将解析行,然后执行.逐行或逐块(括号内的行).当解析器到达一行或一行行时,在读取变量的所有点处,删除对变量的引用,并在开始执行块之前用变量中的值替换.因此,如果变量在块内更改其值,则不会从同一块内部访问此新值.正在执行的内容不包括对变量的引用,而是在解析代码时包含变量中的值.
若要更改此行为,并且能够从更改值的同一块内读取变量的更改值,则需要延迟扩展.
当启用延迟扩展,以访问/读取变量的语法可以从被改变(在需要的地方)%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!
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2913 次 |
最近记录: |