Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批量获取变量的长度_Batch File_Variables_String Length - Fatal编程技术网

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操作符为和>>和|的代码。接下来,创建文件要比在内存中完成所有操作慢。如果使用此批处理代码对用户帐户的当前工作目录进行写保护,则结果也是错误的,因为无法在当前目录中创建文件。如果当前目录中存在length.txt,但设置了只读属性,则结果也是错误的。@Woowing-您可以使用%var%>在>前面加空格,然后减去3而不是2,以避免@MofiThis引起的问题。该代码有几个问题。首先使用%var1%是不好的。为什么?尝试使用set var1=2或set var1=Redirection操作符为和>>和|的代码。接下来,创建文件要比在内存中完成所有操作慢。如果使用此批处理代码对用户帐户的当前工作目录进行写保护,则结果也是错误的,因为无法在当前目录中创建文件。如果当前目录中存在length.txt,但设置了只读属性,则结果也是错误的。@Woowing-您可以使用%var%>在>前面加空格,然后减去3而不是2,以避免@Mofi引起的问题