saz*_*azr 0 windows batch-file
我的批处理脚本中发生了一个非常奇怪的错误,其中一个For循环只循环一次它应该循环多次(至少10次).
你能告诉我为什么我的For循环只循环一次以及我如何解决它?
@ECHO off
CLS
SETLOCAL
SET macroFolder=_PLACE_4DM_FILES_HERE
REM the following for loop only loops once when it should be looping more
REM because theres over 10 *.4dm files in the folder??
for /r ./%macroFolder% %%i in ("*.4dm") do SET "file=%%i" (
echo %file%
REM Note I need to store %%i in a variable so I can edit it later
REM And placing %%i in a variable within the for loop results in
REM the var being empty for some reason. For eg
SET file=%%i
ECHO file is %file%
REM Prints "file is "
)
ECHO.
PAUSE
ENDLOCAL
Run Code Online (Sandbox Code Playgroud)
你有(至少)两个问题.首先,你似乎在混淆声明的括号内和非括号内的形式for:
for /r ./%macroFolder% %%i in ("*.4dm") do SET "file=%%i" (
blah blah
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,非循环迭代位是按循环迭代执行的,但是括号位在循环退出后执行.你可以看到这个:
for /r ./%macroFolder% %%i in ("*.4dm") do echo 1 (
echo 2
)
Run Code Online (Sandbox Code Playgroud)
哪个输出(在我的情况下有三个4dm文件):
1 (
1 (
1 (
2
Run Code Online (Sandbox Code Playgroud)
第二个问题是%%变量扩展是在命令执行之前完成的,for命令是多行的,从for结束)括号到结束括号.您需要扩展的任何变量(已在循环中设置)需要通过延迟扩展来完成.
从这开始:
@SETLOCAL enableextensions enabledelayedexpansion
@ECHO off
CLS
SET macroFolder=4dmfiles
for /r ./%macroFolder% %%i in ("*.4dm") do (
SET file=%%i
ECHO file is !file!
)
ECHO.
PAUSE
ENDLOCAL
Run Code Online (Sandbox Code Playgroud)
你会看到(对于我的三个文件):
file is C:\Users\Pax\Documents\4dmfiles\1.4dm
file is C:\Users\Pax\Documents\4dmfiles\2.4dm
file is C:\Users\Pax\Documents\4dmfiles\3.4dm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |