批处理文件使用fortring中的子字符串变量

时间:2015-02-26 22:24:05

标签: batch-file

我正在尝试在这里使用.bat文件,无法安静地获得我想要的结果。

这是问题点:

setlocal enabledelayedexpansion
REM Import our message
set messagelines=0
for /F "tokens=*" %%B in (Myfile.txt) do (
    SET /A messagelines=!messagelines! + 1
    set message!messagelines!=%%B
)
set message

for /L %%C in (1,1,%templatelines%) do (

    REM template%%C defined above
    call :strlen length template%%C

    set string=!message%%C!

    echo !length!

    set string=!string:~0,3!

    REM **** DOESNT WORK ****
    set string=!string:~0,!length!!

    echo !string!
)

REM Finish
exit 1


:strlen <resultVar> <stringVar>
(   
    setlocal EnableDelayedExpansion
    set "s=!%~2!#"
    set "len=0"
    for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
        if "!s:~%%P,1!" NEQ "" ( 
            set /a "len+=%%P"
            set "s=!s:~%%P!"
        )
    )
)
( 
    endlocal
    set "%~1=%len%"
    exit /b
)

所有内容始终显示正常,但我无法使用长度变量来处理我的消息的子字符串。

我尝试过几种不同的方法,但仍不清楚该怎么做。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这条线不起作用,因为你在惊叹号内部有感叹号,而批次正在匹配左边和右边的两个而不是内部的两个和外面的两个。你需要跑!长!通过for循环,以便变量将使用%符号:

for %%D in (!length!) do set string=!string:~0,%%D!