用延迟的扩展变量替换子字符串

时间:2016-07-06 19:20:01

标签: batch-file cmd

我试图通过将原始字符串与替换字符串进行比较来计算多个变量,从中删除子字符串。它适用于常规变量%var%并且不需要使用延迟扩展的情况,但是有一种方法可以使它与延迟扩展变量一起使用!var!而不是使用第二个FOR循环?以下代码无法计算pat#变量。我确实知道,可以使用不同的方法对它们进行计数,但这只是一个例子来说明我关于替换子串的问题。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "pat1=A" & set "pat2=B" & set "pat3=C" & set "pat4=D" & set "pat5=E"
set "pat6=F" & set "pat7=G" & set "pat8=H" & set "pat9=I" & set "pat10=J"
set "patn=;0;1;2;3;4;5;6;7;8;9;"

if not defined patc (
    for /f %%l in ('set pat') do (
        set "patl=%%l" & set "patl=!patl:~3,1!"
        if not "!patn:;!patl!;=!"=="%patn%" (set /a "patc+=1" & echo !patc!)))
exit /b

1 个答案:

答案 0 :(得分:2)

你需要使用某种双重扩展 可能有CALLFOR-parameter

....
set "patl=%%l" & set "patl=!patl:~3,1!" & echo ;!patl!;
call echo %%patn:;!patl!;=%%

or

FOR /F "delims=" %%S in ("!patn!") do (
    echo !patn:;%%S;=!
)