GG.*_*GG. 4 variables loops batch-file
一个例子:
FOR %%i IN (3) DO (
ECHO %%i
FOR /R "C:\backup\server%%i\temp" %%? IN (*.bak) DO (
REM some code...
)
)
Run Code Online (Sandbox Code Playgroud)
的结果ECHO:3。
第二个结果FOR:代码没有被执行。
但与:
FOR %%i IN (3) DO (
ECHO %%i
FOR /R "C:\backup\server3\temp" %%? IN (*.bak) DO (
REM some code...
)
)
Run Code Online (Sandbox Code Playgroud)
的结果ECHO:3。
第二个结果FOR:代码被执行。
任何想法?
原始代码不起作用的原因是因为在解析 FOR 时必须知道 FOR /R 选项的目录,但 %%i 变量只有在解析了 FOR 语句之后才会展开。adarshr 建议也存在同样的问题 - !suffix! 在解析 FOR 语句之后才会展开。
GG的回答是一个非常好的可行的解决方法。也许可以通过 PUSHD 和最后的 POPD(而不是 CD)来改进。但仅限于需要时。
我能想到解决这个问题的唯一其他方法是这样的
@echo off
FOR %%i IN (3) DO call :innerLoop %%i
exit /b
:innerLoop
FOR /R "C:\backup\server%1\temp" %%? IN (*.bak) DO (
REM some code...
)
exit /b
Run Code Online (Sandbox Code Playgroud)
但除非迫不得已,我不喜欢使用 CALL,因为它效率低下。我喜欢 CD 解决方案。