为啥即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制]

Posted

技术标签:

【中文标题】为啥即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制]【英文标题】:Why can't I access local variable in for loop (batch file) even with setlocal enabledelayedexpansion? [duplicate]为什么即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制] 【发布时间】:2021-03-03 21:38:35 【问题描述】:

尝试访问批处理文件中 FOR 循环中的自定义局部变量时,我不断收到 ECHO is off。 尽管正如许多指南所建议的那样,enabledelayedexpansion 被设置并与!_! 一起使用..

可能有什么问题以及在这种情况下应该如何执行这种技巧?

@ECHO OFF

for %%I IN (.) DO SET BatCurrPath = %%~fI
ECHO ---------------
ECHO %BatCurrPath%
ECHO ---------------

SETLOCAL ENABLEDELAYEDEXPANSION
for /d %%d IN (*.*) DO (
    SET DirFound = %%d
    ECHO !DirFound!      <==== outputs "ECHO is off"
    ECHO %%d             <==== outputs child's dirname
)
ENDLOCAL

【问题讨论】:

【参考方案1】:

试试这样:

@ECHO OFF

for %%I IN (.) DO SET "BatCurrPath=%%~fI"
ECHO ---------------
ECHO %BatCurrPath%
ECHO ---------------

SETLOCAL ENABLEDELAYEDEXPANSION
for /d %%d IN (*.*) DO (
    SET "DirFound=%%d"
    ECHO !DirFound!     
    ECHO %%d            
)
ENDLOCAL

不要在= 周围使用空格,否则空格将成为变量名的一部分。

【讨论】:

以上是关于为啥即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

修复达到的最大setlocal递归级别

为啥即使使用 QThreadPool,GUI 也会冻结?

为啥即使使用单个 reducer 也会调用 Partitioner

为啥 isConfiguration:compatibleWithStoreMetadata 会返回 yes,即使使用了映射模型?

即使我在 laravel 中使用 updateorcreate 方法,为啥还要复制数据

为啥即使使用提交后 sql plus 也不会保存新行?