【问题标题】:set unset variable, scope CMD Script Windows, routines设置未设置变量、范围 CMD 脚本窗口、例程
【发布时间】:2014-11-21 01:09:04
【问题描述】:

我想知道如何解决这个问题:

rem declaring variable
set "vara="
echo vara:%vara% bef
call :myroutine
echo vara:%vara% aft

:routine
rem ...
rem assing value to variable vara
set "vara=34"
echo vara was assigned...
rem ....
echo vara:%vara%
exit /b

现在我以后有这个:

vara: bef
vara was assigned
vara:34
vara: aft

我需要使用例程之后的值,像这样......

vara: bef
vara was assigned
vara:34
vara:34 aft

vara:34 船尾 怎么做?

【问题讨论】:

    标签: variables batch-file scope subroutine


    【解决方案1】:

    假设您调用了正确的标签,这已经发生了。 (:我的例程!=:例程)。您的脚本还有一些其他小问题(在:routine 之前缺少goto :EOF,并在执行@echo offsetlocal)。这里是固定的:

    @echo off
    setlocal
    rem declaring variable
    set "vara="
    echo vara:%vara% bef
    call :routine
    echo vara:%vara% aft
    
    set "vara="
    goto :EOF
    
    :routine
    rem ...
    rem assing value to variable vara
    set "vara=34"
    echo vara was assigned...
    rem ....
    echo vara:%vara%
    exit /b
    

    有关调用子例程/函数的更多信息,请参阅this page,特别注意有关返回值的不同方法的部分。除非您在 setlocal 中使用 setlocal,否则您在问题中描述的内容已经按照您的意愿工作。

    【讨论】:

    • 使用 goto :EOF exit /b 有区别吗? . .我使用 setlocal 有什么优势?
    • 对于这个脚本,goto :EOFexit /b 没有区别。两者之间唯一真正的区别是exit /b 允许您根据需要将%ERRORLEVEL% 设置为非零值。有关更多信息,请参阅this page。使用setlocal 可以防止您的脚本使用仅与脚本相关的变量来破坏您的操作环境。如果没有setlocal%vara% 将在脚本退出后保持定义——或者无论如何它都会没有set "vara=" 行。除非有意这样做,否则这通常是不受欢迎的。
    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多