我对 cmd 解释器处理变量的方式有以下问题。我不能让它工作。你能告诉我诀窍吗?
问题:我在批处理文件中调用带有参数的子程序。取决于参数是什么值,子程序动态地在变量中构建一个字符串。该变量应在主批处理中使用。
@echo off
set globalvar=text_two,text_one
FOR %%U IN (%globalvar%) DO (
call :SUBROUTINE %%U
echo Variable DYNAMIC after Subroutine: %dynamic%
)
goto :END
:SUBROUTINE
::This Subroutine should Build the VARIABLE depended on the Argument
echo Dynamic in SUB1: %1
IF /I %1==text_one (set dynamic=dynamic_text_example_one)
IF /I %1==text_two (set dynamic=dynamic_text_example_two)
goto:EOF
:END
Run Code Online (Sandbox Code Playgroud)
此 Sript 的输出执行了两次:
Dynamic in SUB1: text_two
Variable DYNAMIC after Subroutine:
Dynamic in SUB1: text_one
Variable DYNAMIC after Subroutine:
Dynamic in SUB1: text_two
Variable DYNAMIC after Subroutine: dynamic_text_example_one
Dynamic in SUB1: text_one
Variable DYNAMIC after Subroutine: dynamic_text_example_one
Run Code Online (Sandbox Code Playgroud)
我期待以下输出,但如何?
Dynamic in SUB1: text_two
Variable DYNAMIC after Subroutine: dynamic_text_example_two
Dynamic in SUB1: text_one
Variable DYNAMIC after Subroutine: dynamic_text_example_one
Dynamic in SUB1: text_two
Variable DYNAMIC after Subroutine: dynamic_text_example_two
Dynamic in SUB1: text_one
Variable DYNAMIC after Subroutine: dynamic_text_example_one
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗 ?问候莫洛格
使用延迟扩展,即 put
setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)
在您的批次开始时,然后使用
FOR %%U IN (%globalvar%) DO (
call :SUBROUTINE %%U
echo Variable DYNAMIC after Subroutine: !dynamic!
)
Run Code Online (Sandbox Code Playgroud)
%dynamic%
展开瞬间cmd
解析完整的for
循环;因此它无法获取您在子程序中设置的值(这显然发生在循环内)。
归档时间: |
|
查看次数: |
14994 次 |
最近记录: |