2017-10-29 194 views
0

在我的批处理文件中,我有几个for循环。批处理:在多个循环中多次使用变量for

exampleInputDir\weapon\%character%\thing1 
            \thing2 
            \thing3 

每一件事#文件夹包含motion.mtable文件

FOR /R "C:\exampleInputDir\weapon\%character%\" %%G IN (motion.mtable) DO (
    FOR %%b in ("%%~dpG\.") DO set "weaponname=%%~nxb" 
    FITD -le "%G%" -o "C:\exampleOutputDir\%character%\%weaponname%" 
    ) 

如果不清楚是什么,我试图做的,我需要的%G%变量不止一次,并且对于其中一次,我需要稍微更改并将其放入另一个变量,以便我可以在一个命令中调用它两次。

如果有什么不清楚的只是让我知道,我会尽力澄清! 谢谢!

编辑:我想这最后的命令是:

FITD -le "exampleInputDir\weapon\%character%\thing#\motion.mtable" -o "C:\exampleOutputDir\%character%\thing#" 

,我想的命令,因为weaponname%%~nxb通过thing1,thing2和thing3

回答

0
FITD -le "%G%" -o "C:\exampleOutputDir\%character%\%%~nxb" 

运行的目的是一样的。

与许多其他人一样,您陷入了delayedexpansion陷阱。有数以百计的例子 - 只需使用search设施。


也可以使用delayedexpansion解决问题

setlocal enabledelayedexpansion 
FOR /R "C:\exampleInputDir\weapon\%character%\" %%G IN (motion.mtable) DO (
    FOR %%b in ("%%~dpG\.") DO set "weaponname=%%~nxb" 
    FITD -le "%G%" -o "C:\exampleOutputDir\%character%\!weaponname!" 
    ) 
endlocal 

使用setlocal/endlocal托架以使delayedexpansion并且因此能够访问一个code block内进行修改变量的运行时值(或括号的行序列)。

优点 - 允许访问代替%var%通过!var!运行时值的变量的(%var%解析为分析时值)

缺点 - 为对cognescenti
- 在括号内建立或修改的值只能存在直到括号结束
- 有一个修改意义,需要特别注意

+0

等一下,delayedexpansion陷阱?我需要delayedexpansion吗? 非常感谢你,我现在就放弃它:) – Yudowat