如何使用批处理文件中的另一个变量覆盖现有变量?

时间:2014-09-01 17:34:00

标签: batch-file

在以下两个(简化示例)批处理文件中,当我想覆盖一些变量时,我遇到了困难:

batch_test 1:

 @echo off
 set var=D:
 set var_2=%var%\DOMAIN
 set var_3=%var_2%\sub_domain
 call batch_test2.bat
 @echo %var%
 @echo %var_2%
 @echo %var_3%

batch_test 2:

  @echo off
  if 1==1 (
      set var=E:
      set var_2=%var%\Component
      set var_3=%var_2%\comp1
  )

输出:

E:
d:\组件
d:\ DOMAIN \ COMP1

expected_output:

E:
E:\组件
E:\ DOMAIN \ COMP1

如何使用多个变量获取expected_output?

2 个答案:

答案 0 :(得分:1)

对于batch_test 2,您应该使用延迟扩展和tunneling

  @echo off
  setlocal enableDelayedExpansion
  if 1==1 (
      set var=E:
      set var_2=!var!\Component
      set var_3=!var_2!\comp1
  )
  endlocal & (
     set var=%var%
     set var_2=%var_2%
     set var_3=%var_3%
  )

答案 1 :(得分:1)

这又是臭名昭着的早期变量扩展问题:批处理脚本在块启动之前提前替换变量。 这意味着%var_2%将固定为第一个值。要解决这个问题,请使用setlocal enabledelayedexpansion,然后使用"!"围绕变量。而不是"%"。