在以下两个(简化示例)批处理文件中,当我想覆盖一些变量时,我遇到了困难:
@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%
@echo off
if 1==1 (
set var=E:
set var_2=%var%\Component
set var_3=%var_2%\comp1
)
E:
d:\组件
d:\ DOMAIN \ COMP1
E:
E:\组件
E:\ DOMAIN \ COMP1
如何使用多个变量获取expected_output?
答案 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
,然后使用"!"围绕变量。而不是"%"。