在尝试使用批处理脚本在Windows计算机中自动执行任务的过程中,我遇到了一个问题,因此基本上在批处理脚本中,我有两个过程,一个称为:main
,另一个过程:str_len
。
:ste_len
过程收到两个参数( Rem:从算法角度看,第一个参数被认为是字符串,第二个参数被认为是整数),当从:main
进行调用时过程,然后执行的操作是计算“字符串”的长度,然后将其存储到第二个参数中,我遇到的问题是我不知道如何使用批处理来引用变量,例如创建某种排序的方式:main
部分中的变量指针,然后使用:str_len
命令将此指针发送到call
部分,有点像我们在C编程语言中所说的按地址段落。 >
我尝试使用length
命令声明变量set
,如果我这样做的话,则它的名字不带任何%
将直接指向该变量,但是我的假设是错误的。
为了达到我的目标,我尝试两次使用调用命令,第一次是从:main
到:str_len
,第二次是从:str_len
到main的子例程接收必要的数据并进行打印(处理),之所以我没有选择此解决方案,主要是因为我正在处理一个较大的问题,该问题需要多个过程才能操作throw(该问题与以下过程之一有关) ),并且其中大多数都需要某种协作(一个过程使用另一个过程的输出才能正常工作),因此您可能已经猜到第二种解决方案会使我的代码真正模棱两可。
@echo off
title test
:main
set string=%1
set /A l=0
call :str_len %string%
:return_str_len
echo the string "%string%" is %1 characters long!
goto :eof
goto :eof
:str_len
setlocal enabledelayedexpansion
set str=%1
if "%str%"=="!str:~0,%i%!" (
call return_str_len %i%
endlocal
goto :eof
) else (
set /A i+=1
goto str_len
)
@echo off
title test
:main
set string=%1
set /A l=0
call :str_len %string% length
echo The string "%string%" is %length% characters long!
goto :eof
:str_len
setlocal enabledelayedexpansion
set str=%1
if "%str%"=="!str:~0,%i%!" (
set %2=%i%
endlocal
goto :eof
) else (
set /A i+=1
goto str_len
)
我希望上面的代码输出的是这样的:
>test.bat Hello
The String "Hello" is 5 characters long!
但是它实际输出的是这样:
>test.bat
The string "Hello" is characters long!
1)-是否有一种方法可以批量创建一个指向变量的指针,如果可以,那么如何将其与call命令结合使用以获得我想要的结果?
2)-如果第一个问题的答案是“不”,那么您能告诉我一个解决方法,使我得到的结果与我打算使用Batch达到的结果足够接近。