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

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

批处理测试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%

批量测试 2:

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

输出:

E:
D:\Component
D:\DOMAIN\comp1

期望输出:

E:
E:\Component
E:\DOMAIN\comp1

如何使用多个变量获取期望输出?

2个回答

3

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


2

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

  @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%
  )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接