不知道如何将另一个值初始化为批处理文件中的变量

时间:2012-12-06 07:19:37

标签: batch-file

@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,没有值

2 个答案:

答案 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%