set /p
变量,并将该变量的输出重定向到params.txt。
for /f "tokens=*" %%a in ('dir "%MODEL_SRC%" /a:d-h /b') do (
set /p=-o="%MODEL_DST%\%%a.res" >cvtr_params.txt<nul
for /f %%b in ('dir "%MODEL_SRC%\%%a\*.obj" /a:-d-h /b') do (
<nul (set/p=""%MODEL_SRC%\%%a\%%b" ") >>cvtr_params.txt
)
for /f "tokens=*" %%c in ('dir "%TEX_SRC%\%%a\*.png" /a:-d-h /b') do (
<nul (set/p=""%TEX_SRC%\%%a\%%c" ") >>cvtr_params.txt
)
start /b /wait "" bin\converter.exe @cvtr_params.txt >nul
)
del cvtr_params.txt
params.txt看起来像这样:
-o="ConvertedPath\Ingame.res" "ModelPath\Model1.obj" "ModelPath\Model2.obj" "TexPath\Tex1.png" "TexPath\Tex2.png"
等等等等。
是的,代码对于实际附加到行的末尾而不是新行很复杂。
现在我想,cvtr_params.txt是不必要的,并采用这种方法,几乎相同,只是不将set /p
变量的“问题”重定向到params.txt但实际上只是分配set /p params
set /p z
的“问题”setlocal EnableDelayedExpansion
for /f "tokens=*" %%a in ('dir "%MODEL_SRC%" /a:d-h /b') do (
set /p params=<nul
set /p z=-o="%MODEL_DST%\%%a.res" <nul
for /f %%b in ('dir "%MODEL_SRC%\%%a\*.obj" /a:-d-h /b') do (
<nul (set/p=""%MODEL_SRC%\%%a\%%b" ")
)
for /f "tokens=*" %%c in ('dir "%TEX_SRC%\%%a\*.png" /a:-d-h /b') do (
<nul (set/p=""%TEX_SRC%\%%a\%%c" ")
)
start /b /wait "" bin\converter.exe !params!
)
endlocal
。
!params!
但不知何故,"ECHO is set to <OFF>
变量显示为空。 (回声传递{{1}}“)
现在我已经结束了我的智慧,我刚开始认真使用3天前的批处理文件,所以如果有人有个好主意,让我听听吧! :)
格尔茨
答案 0 :(得分:2)
在您的代码中,params
在开头设置为空,之后从未更改,所以您期望什么?
如果你想在params
中连接元素,你应该尝试一下
set params=!params! ""%TEX_SRC%\%%a\%%c" "
但要注意,自WinXP或更高版本以来,环境变量都有maximum length of 8191 characters(较早的系统较少)。