2017-10-29 138 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