如何从循环内部设置全局变量

时间:2018-09-01 14:47:48

标签: batch-file

这是我正在使用的批处理代码。

set fullstring=
set string=testago
echo %string%>x&FOR %%? IN (x) DO SET /A strlength=%%~z? - 2&del x

for /L %%a in (1,1,%strlength%) do (
    set b=%%a - 1
    set c=%%a
    set this=%string:~%%b,%%c%
    set fullstring=!fullstring!%this%
)

echo %fullstring%
pause

这是将一个字符串(一个字符串)逐个字符读回到另一个(完整字符串)。我需要知道如何从for循环中覆盖完整字符串。

1 个答案:

答案 0 :(得分:0)

@echo off
setlocal enabledelayedexpansion

set "fullstring="
set "string=testago"

> x echo %string%

for %%? in (x) do set /a "strlength=%%~z? - 2"

del x

for /l %%a in (1,1,%strlength%) do (
    set /a "b=%%a - 1"
    call set "this=%%string:~!b!,1%%"
    set "fullstring=!fullstring!!this!"
)

echo "%fullstring%"
pause

for /l循环中,不需要删除c变量。

使用call set对行进行第二次解析以设置this变量。 b需要延迟扩展,然后string变量需要扩展,因此 在call set上使用string并使用双倍的百分比即可达到目的。

变量替换的第二个参数是长度。 每个字符的长度将为常数1。

串联整个字符串将需要延迟扩展 或使用call set作为替代。