Batch file 批量获取变量的长度
假设我编写这个批处理代码来生成一个变量Batch file 批量获取变量的长度,batch-file,variables,string-length,Batch File,Variables,String Length,假设我编写这个批处理代码来生成一个变量 set var1=test 现在,我如何获取该变量的长度并将其回显?如果将该变量回显到一个文件中,然后获取该文件的长度,则由于不可见字符,可以减去2个字符 echo %var1%> length.txt for %%? in (length.txt) do ( set /a length=%%~z? - 2 ) 那么您的长度应该在一个名为length的变量中如果您将变量回送到一个文件,然后获取文件的长度,您可以减去2个字符,因为不可见的字符 ec
set var1=test
现在,我如何获取该变量的长度并将其回显?如果将该变量回显到一个文件中,然后获取该文件的长度,则由于不可见字符,可以减去2个字符
echo %var1%> length.txt
for %%? in (length.txt) do ( set /a length=%%~z? - 2 )
那么您的长度应该在一个名为length的变量中如果您将变量回送到一个文件,然后获取文件的长度,您可以减去2个字符,因为不可见的字符
echo %var1%> length.txt
for %%? in (length.txt) do ( set /a length=%%~z? - 2 )
那么您的长度应该是一个名为length的变量,您可以使用以下代码:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "var1=test"
set "Length=0"
if not defined var1 goto OutputLength
:GetLength
if not "!var1:~%Length%,1!" == "" (
set /A Length+=1
goto GetLength
)
:OutputLength
echo Length of variable var1 is: %Length%
endlocal
pause
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
回声/?
endlocal/?
转到/?
如果/?
暂停/?
集/?
setlocal/?
您可以使用以下代码:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "var1=test"
set "Length=0"
if not defined var1 goto OutputLength
:GetLength
if not "!var1:~%Length%,1!" == "" (
set /A Length+=1
goto GetLength
)
:OutputLength
echo Length of variable var1 is: %Length%
endlocal
pause
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
回声/?
endlocal/?
转到/?
如果/?
暂停/?
集/?
setlocal/?
函数调用版本
看
1.
宏版本
我已经包括了宏版本,虽然它可能很难看到它是如何工作的,实际上它在内联扩展时加快了执行速度,不需要函数查找
看
1.
2.
这些版本总是需要13个循环操作来处理多达8192个循环
字符字符串长度。您可以减少循环操作以加快速度,但是
移除的环将可处理的长度减少两倍,即12
循环数=4096,11个循环数=2048,依此类推
函数调用版本
看
1.
宏版本
我已经包括了宏版本,虽然它可能很难看到它是如何工作的,实际上它在内联扩展时加快了执行速度,不需要函数查找
看
1.
2.
这些版本总是需要13个循环操作来处理多达8192个循环
字符字符串长度。您可以减少循环操作以加快速度,但是
移除的环将可处理的长度减少两倍,即12
循环数=4096,11个循环数=2048,依此类推
此代码的可能副本有几个问题。首先使用%var1%是不好的。为什么?尝试使用set var1=2或set var1=Redirection操作符为