gpt4 book ai didi

Windows批处理括号范围

转载 作者:可可西里 更新时间:2023-11-01 09:45:30 25 4
gpt4 key购买 nike

如何在用括号(“if”或“for”循环)包围的范围内设置结果变量。直接调用procedure时结果正确(>> RESULT: aaa = bbb),用于for-loop或if-statement时失败(>> RESULT: ccc = )。

:: =====================================
@setlocal
@echo off
@rem (1)
call :testReturn aaa
echo RESULT: aaa = %aaa%

@rem (2)
if "1" == "1" (
call :testReturn ccc
echo RESULT: ccc = %ccc%
)

goto :eof

:testReturn
set %~1=bbb
exit /b
endlocal

谢谢!!

最佳答案

当要执行括号中的复合语句时,该语句首先从左括号中解析匹配右括号的方法。

此时,任何 %var% 都被来自 var 的值替换环境 ATTHE IT IS PARSED(即它的 PARSE-TIME 值。)

THEN 如果语句看起来有效,则执行。

访问 RUN-TIME 值的常用方法有 3 种变量(例如,作为 FOR 循环执行。)

1/SETLOCAL ENABLEDELAYEDEXPANSION 切换到一个模式!变种!可用于访问 var
的运行时值2/CALL set var2=%%var%% 设置 var2 的值var
的运行时值3/执行内部或外部子程序,其中 %var%将是运行时值。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%i IN (1 2 3) DO (
ECHO START of run %%i
ECHO using ^!time^! : !time! - PARSE TIME was %time%
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%%
CALL :report
timeout /t 5
ECHO using ^!time^! : !time!
CALL ECHO using CALL %%%%TIME%%%% : %%TIME%%
CALL :report
ECHO END of run %%i
ECHO.
)
GOTO :eof

:report
ECHO :report says TIME is %TIME%
GOTO :eof

需要注意的几点:

  1. 说明

    IF ERRORLEVEL n echo errorlevel is n OR GREATER

    ALWAYS 解释 ERRORLEVEL

  2. 的运行时值
  3. IF SET VAR ALWAYS 解释 VAR

    的运行时值
  4. 像 ERRORLEVEL 和 TIME 这样的魔法变量永远不应该被设置。如果你执行

    SET ERRORLEVEL=dumb

然后 ERRORLEVEL 将采用值 dumb 因为当前环境中的值优先于系统分配的值。

关于Windows批处理括号范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16852503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com