У вас есть 2 проблемы:
1) Вы путаете переменные FOR с переменными среды. Пакетное имя переменной FOR всегда представляет собой один символ, и доступ к нему осуществляется через 2 процента перед именем: %%c
. Значение переменной FOR нельзя изменить с помощью SET.
Имя переменной среды может содержать несколько символов, хотя это может быть один символ, и к нему можно обратиться, заключив имя в процентах: %var%
. Восклицательные знаки можно использовать, если вы хотите отсроченное расширение !var!
, Значение переменной среды устанавливается с помощью SET.
2) Трюк CALL для доступа к значениям переменных среды, которые были установлены в заключенном в скобки кодовом блоке, используется во время раскрытия, а не при установке значения.
Я считаю, что Мусио предоставил лучший ответ; Я всегда использую замедленное расширение, как в этом ответе. Но можно сделать то, что вы хотите, без отложенного расширения, правильно используя переменную окружения и трюк CALL.
@echo off
for /f "tokens=1-3 delims=," %%a in (Puck.csv) do (
echo Hello No Hockey>%%a.txt
echo #:A %%a>>%%a.txt
echo #:B %%b>>%%a.txt
set C=%%c
if /i %%c gtr 10 set C=1
call echo #:C %%C%%>>%%a.txt
)
Обратите внимание, что крайне важно, чтобы регистр переменной FOR отличался от переменной среды. Переменные FOR чувствительны к регистру, переменные среды - нет. Если вы используете c
для обоих, то синтаксический анализатор будет обрабатывать %%c%%
как переменную FOR, за которой следует процент, а не то, что вы хотите.