在Windows CMD批处理文件中的IF/ELSE语句中设置变量
我有一个简单的cmd脚本:在Windows CMD批处理文件中的IF/ELSE语句中设置变量,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个简单的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 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%
结果如我所料。使用不同的参数交替运行脚本可以清楚地看到问题
我读过一些帖子,但我认为这是另一种问题
那么,在IF/ELSE语句中有什么方法可以防止这种行为呢
@echo off
if %1.==. (
echo Missing argument
) else (
SET somevar=%1
echo %1
CALL echo %%somevar%%
)
或
资源(必读):
- (命令参考)
- (其他特殊性)
- (专页)
- (
)调用echo%%somevar%%
- (它不是
,而是%1%
)%1
。(
到如果“%~1”==”(
也是。
@echo off
SETLOCAL EnableDelayedExpansion
if %1.==. (
echo Missing argument
) else (
SET somevar=%1
echo %1
echo !somevar!
)