gpt4 book ai didi

windows - 为什么递归 (/R) for 循环在 Windows 批处理文件中有奇怪的行为

转载 作者:可可西里 更新时间:2023-11-01 10:33:05 27 4
gpt4 key购买 nike

似乎 !DRIVE!考虑到延迟扩展已启用,应该可以工作。为什么不呢?为什么下面的代码不适用于第一种情况?

@echo off
setlocal EnableDelayedExpansion
SET "DRIVE=H:\"

REM DOESN'T WORK
FOR /R "!DRIVE!" %%S in (*) do (
echo(%%S
)
pause

REM WORKS
FOR /R "%DRIVE%" %%S in (*) do (
echo(%%S
)
pause

REM WORKS
FOR /R "H:\" %%S in (*) do (
echo(%%S
)
pause

最佳答案

因为... that's how it works (for/f 选项也有这个问题)。 For 有一个单独的解析器并且 for 定义不受延迟扩展的影响(尝试不使用 echo off 以查看执行的内容)。您可以使用两种解决方法之一(使用子例程)

@echo off
setlocal EnableDelayedExpansion
SET "DRIVE="H:\""
call :rec !DRIVE!
exit /b 0


:rec
FOR /R "%~1" %%S in (*) do (
echo(%%S
)

(嵌套for)

@echo off
setlocal EnableDelayedExpansion
SET "DRIVE=H:\"

set "cmd=for /R "%%DRIVE%%" %%a in (*) do @echo(%%a"

for /F "delims=" %%x in ('!cmd!') do echo %%x

关于windows - 为什么递归 (/R) for 循环在 Windows 批处理文件中有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43044589/

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