首页 > 解决方案 > 使用“CALL”命令的问题

问题描述

问题总结

在尝试使用批处理脚本在我的 Windows 计算机中自动执行任务的过程中,我遇到了一个问题,所以基本上在批处理脚本中我有两个过程:main,一个称为另一个:str_len

:ste_len过程在从过程中调用时接收两个参数(Rem:从算法的角度来看,第一个被认为是字符串,第二个被认为是整数),:main它所做的是计算“字符串”的长度,然后将其存储到它的第二个参数,我遇到的问题是我不知道如何使用批处理引用变量,就像在零件中创建某种变量指针:main然后:str_len使用命令将此指针发送到零件的方法call,有点像在 C 编程语言中,我们称之为按地址的段落。

我试过的

length我尝试使用命令声明变量,set如果我这样做,那么它的名称没有任何%将是一个直接指向它的指针,但我的假设是错误的。

另外为了达到我的目标,我尝试使用 call 命令两次,第一次从:mainto:str_len和第二次 from :str_lento 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)-有没有办法批量创建指向变量的指针,如果是,那么我如何将它与调用命令结合起来以获得我想要得到的结果?

2)-如果第一个问题的答案是“不”,那么你能告诉我一个解决方法,它会给我一个足够接近我打算使用 Batch 达到的结果。

标签: batch-filecmdsubroutinemethod-call

解决方案


推荐阅读