批处理延迟变量

set SEQ_ROOT=%CD%
cd %SEQ_ROOT%

@echo off
setlocal enabledelayedexpansion
set ma="AM4100D-MA"
set sa=%SEQ_ROOT%\platform\kzbb\airmasters\pycfg\SQN3220_B3_7_20_38_40_41_42_43_MNC
for /f "tokens=1-2* delims= " %%i in (%sa%\bandsupport.txt) do (copy %SEQ_ROOT%\platform\kzbb\airmasters\pycfg\bootrom\AM4100D-MA.py %sa%\%%i.py
set da="%%i"
set ta=%%j
set ca=%%i.py
cd /d "%~dp0"
set "strma=(1<<3)|(1<<7)|(1<<20)|(1<<38)|(1<<40)|(1<<41)|(1<<42)|(1<<43)"
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* %sa%\!ca!') do (
if "%%b" == "" (echo.) else (
set "var=%%b"
set "var=!var:%strma%=%ta%!"
echo,!var!
)
))>#
move /y # %sa%\!a!
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* %sa%\!ca!') do (
if "%%b" == "" (echo.) else (
set "var1=%%b"
set "var1=!var1:%ma%=%da%!"
echo,!var1!
)
))>#
move /y # %sa%\!ca!
)

运行以上代码不会进行替换,认为da为空,延时变量在替换时怎么用,求大神

set "var=!var:%strma%=%ta%!"

改成

call set "var=%%var:!strma!=!ta!%%"


set "var1=!var1:%ma%=%da%!"

改成

call set "var1=%%var1:!ma!=!da!%%"



因为你的strma,ma,da这三个变量都在for中循环,开启环境变量延迟后,因此它们也需要用双感叹号,但var和var1两个变量也在for中循环,它们肯定也需要双感叹号,但那种替换的代码不可以双感叹号的变量里面再出现双感叹号的变量,因此只能通过call的方式转换一下。


由于我没有你的那些实际文件内容,所以没法测试,你自己尝试一下看看准不准确?

温馨提示:答案为网友推荐,仅供参考