Advanced Batch-File: динамическая установка переменной с помощью set / p и перенаправления - PullRequest
1 голос
/ 15 декабря 2010

Привет.
По сути, у меня есть пакетный файл, который просматривает все файлы моделей и текстур, сохраняет их абсолютный путь и затем передает собранные пути в мой файл converter.exe.В настоящее время я делаю это, добавляя путь к каждому входному файлу в переменную 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> ") Теперь я нахожусь в конце своего ума, и я только начал серьезно работать с пакетными файлами, как 3 дня назад, поэтому, если у кого-то есть хорошая идея, дайте мне услышать это! :))

Привет

1 Ответ

2 голосов
/ 15 декабря 2010

В вашем коде params задано пустым в начале и никогда не изменяется впоследствии, так что вы ожидаете?

Если вы хотите объединить элементы в params, вы должны попробовать что-топо линиям

set params=!params! ""%TEX_SRC%\%%a\%%c" "

, но будьте осторожны, переменные окружения имеют максимальную длину , равную 8191 символу , начиная с WinXP или новее (меньше в более ранних системах).

...