@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
答案 0 :(得分:1)
因为...... that's how it works(for /f
选项也存在此问题)。 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
)
(嵌套)
@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