@echo off
set test=%1
if "%1"=="" (
set test=default
echo %test%
) else (
set test=%1
echo %test%
)
测试:
test.bat
输出:
ECHO is off
问题:无法将“默认”字符串指定为变量“test”的值。我发现测试字符串的值仍然是%1,没有值
答案 0 :(得分:4)
这是标准的批量初学者错误。 如您所料,百分比扩展在括号中不起作用。 在解析完整块之前,在执行任何行之前,它会扩展。
所以%test%
扩展为空,即它进入块之前的值。
解决方案是在这里使用延迟扩展,因为!test!
将在执行时扩展而不是解析时间。
@echo off
setlocal EnableDelayedExpansion
set test=%1
if "%1"=="" (
set test=default
echo !test!
) else (
set test=%1
echo !test!
)
答案 1 :(得分:0)
我没有意识到它的工作方式,但它似乎是一个范围问题,内部块中的值没有被传播。以下似乎工作正常:
@echo off
if "%1"=="" (
set test=default
) else (
set test=%1
)
echo %test%