Batch file 如何使用批处理文件中的另一个变量覆盖现有变量?
在以下两个(简化示例)批处理文件中,当我想要覆盖某些变量时遇到困难: 批次试验1: 批次试验2: 输出: E:Batch file 如何使用批处理文件中的另一个变量覆盖现有变量?,batch-file,Batch File,在以下两个(简化示例)批处理文件中,当我想要覆盖某些变量时遇到困难: 批次试验1: 批次试验2: 输出: E: D:\Component D:\DOMAIN\comp1 预期产量: E: E:\Component E:\DOMAIN\comp1 如何使用多个变量获得预期的\u输出?对于批次\u测试2,您应该使用延迟扩展和: 这也是臭名昭著的早期变量扩展问题:批处理脚本在块开始之前提前替换变量。 这意味着%var_2%将固定为第一个值。要解决这个问题,请使用setlocal enabledelay
D:\Component
D:\DOMAIN\comp1 预期产量: E:
E:\Component
E:\DOMAIN\comp1
如何使用多个变量获得预期的\u输出?对于批次\u测试2,您应该使用延迟扩展和:
这也是臭名昭著的早期变量扩展问题:批处理脚本在块开始之前提前替换变量。 这意味着%var_2%将固定为第一个值。要解决这个问题,请使用
setlocal enabledelayedexpansion
,然后用“!”而不是“%”环绕变量
@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
)
@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%
)