批处理脚本(Windows)字符串替换扭曲

Nei*_*her 4 windows cmd batch-file

我知道如何在批处理脚本中进行文字字符串替换.但是,我有一个特定的情况,我需要替换数值变量的值

这是脚本:

setlocal enableextensions enabledelayedexpansion
set /A L=2
:L1
if %L% EQU 0 goto :EOF
set STRING="THIS IS # TEST"
SET NEW=%STRING:#=%%L%
echo %NEW%
set /A L=%L% - 1
goto L1
Run Code Online (Sandbox Code Playgroud)

希望它显示这个:

THIS IS 2 TEST
THIS IS 1 TEST
Run Code Online (Sandbox Code Playgroud)

但它最终将这种方式改为:

THIS IS  TEST2
THIS IS  TEST1
Run Code Online (Sandbox Code Playgroud)

关于如何让它做我需要的任何提示?

谢谢.

jeb*_*jeb 7

即使是aphoria和Bali C的解决方案也会起作用,最好使用它

set "NEW=!STRING:#=%L%!"
Run Code Online (Sandbox Code Playgroud)

届时,更换将在延迟扩展阶段完成,而不是在扩展阶段.

这也适用于感叹号和插入符号 STRING

@echo off

set L=2
set "String=This is # test!"
setlocal EnableDelayedExpansion
set "NEW=!STRING:#=%L%!"
echo !NEW!
Run Code Online (Sandbox Code Playgroud)


Bal*_*i C 3

你就快到了,只需改变一下

SET NEW=%STRING:#=%%L%
Run Code Online (Sandbox Code Playgroud)

SET NEW=%STRING:#=!L!%
Run Code Online (Sandbox Code Playgroud)