在我的批处理文件中,我有几个for循环。
exampleInputDir\weapon\%character%\thing1
\thing2
\thing3
每个#vers文件夹都包含一个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#"
我希望命令能够通过thing1,thing2和thing3
运行答案 0 :(得分:0)
FITD -le "%G%" -o "C:\exampleOutputDir\%character%\%%~nxb"
因为weaponname
和%%~nxb
的目的是相同的。
你和许多其他人一样陷入delayedexpansion
陷阱。 SO上有数百个示例 - 只需使用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
- 在括号内建立或修改的值仅在括号结束之前存在
- !具有修改后的含义,需要特别注意