我有简单的cmd脚本:
@echo off
if %1.==. (
echo Missing argument
) else (
SET somevar=%1
echo %1
echo %somevar%
)
问题在于,在设置变量之前,else块中的变量somevar
的回显正在运行。每次我运行此命令时,参数的回显效果都很好,但变量的回显则显示上一次运行的值。这仅在if / else块中发生,我不明白为什么。如果我这样修改脚本:
@echo off
if %1.==. (
echo Missing argument
exit /B
)
SET somevar=%1
echo %1
echo %somevar%
结果符合我的预期。用不同的参数交替运行脚本可以清楚地看到问题。
我读了一些帖子,例如。 How to clear variables after each batch script run?,但我认为这是另一种问题。
那么,有什么方法可以防止IF / ELSE语句中的此类行为?
答案 0 :(得分:1)
@echo off
if %1.==. (
echo Missing argument
) else (
SET somevar=%1
echo %1
CALL echo %%somevar%%
)
或
@echo off
SETLOCAL EnableDelayedExpansion
if %1.==. (
echo Missing argument
) else (
SET somevar=%1
echo %1
echo !somevar!
)
资源(必读):
CALL echo %%somevar%%
)(note doubled percent signs) %1%
,而是%1
)Command Line arguments (Parameters)