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