使用'CALL'命令的问题

时间:2019-08-12 07:00:10

标签: batch-file cmd subroutine method-call

问题摘要

在尝试使用批处理脚本在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达到的结果足够接近。

0 个答案:

没有答案