批处理文件在 for 循环中使用变量作为子字符串
Batch file using variables for substring inside for loop
我正在尝试在此处使用 .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
)
一切总是正确显示,但是我无法使用我的 length 变量来处理我的消息的子字符串。
我已经尝试了几种不同的方法,但仍然不清楚该怎么做。
提前致谢。
该行不起作用,因为感叹号内有感叹号,并且批处理匹配左侧两个和右侧两个,而不是内部两个和外部两个。你需要 运行 !length!通过 for
循环,使变量将使用 %
符号:
for %%D in (!length!) do set string=!string:~0,%%D!
我正在尝试在此处使用 .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
)
一切总是正确显示,但是我无法使用我的 length 变量来处理我的消息的子字符串。
我已经尝试了几种不同的方法,但仍然不清楚该怎么做。
提前致谢。
该行不起作用,因为感叹号内有感叹号,并且批处理匹配左侧两个和右侧两个,而不是内部两个和外部两个。你需要 运行 !length!通过 for
循环,使变量将使用 %
符号:
for %%D in (!length!) do set string=!string:~0,%%D!