0
@echo off
set test=%1

if "%1"=="" (
set test=default
echo %test%
) else (
set test=%1
echo %test%
)

测试:

test.bat

输出:

ECHO is off

问题:不能将“默认”字符串作为值分配给变量“测试”。我发现测试字符串的值仍然是 %1 没有价值

4

2 回答 2

4

这是标准的批处理初学者错误。如您所料,括号中的百分比扩展不起作用。在解析完整块时,在执行任何行之前,它会扩展。

所以%test%被扩展为空,它进入块之前的值。

解决方案是在这里使用延迟扩展,因为!test!将在执行而不是解析时进行扩展。

@echo off
setlocal EnableDelayedExpansion
set test=%1

if "%1"=="" (
  set test=default
  echo !test!
) else (
  set test=%1
  echo !test!
)
于 2012-12-06T10:03:41.710 回答
0

我没有意识到它是这样工作的,但它似乎是一个范围问题,内部块中更改的值没有被传播。以下似乎工作正常:

@echo off

if "%1"=="" (
    set test=default
) else (
    set test=%1
)
echo %test%
于 2012-12-06T07:28:51.600 回答