Você tem 2 problemas:
1) Você está confuso para variáveis com variáveis de ambiente. Um lote para o nome da variável é sempre um único caractere e é acessado por meio de 2 porcentagens antes do nome: %%c
. Um valor de variável FOR não pode ser alterado com SET.
Um nome de variável de ambiente pode conter vários caracteres, embora possa ser um único caractere, e é acessado ao incluir o nome em porcentagens: %var%
. Os pontos de exclamação podem ser usados se você quiser uma expansão atrasada: !var!
. Um valor de variável de ambiente é definido com SET.
2) O truque CALL para acessar valores de variáveis de ambiente que foram definidos dentro de um bloco de código entre parênteses é usado no momento da expansão, não quando você está configurando o valor.
Acredito que o mousio forneceu a melhor resposta; Eu sempre uso a expansão atrasada como nessa resposta. Mas é possível fazer o que você quiser sem uma expansão atrasada usando apropriadamente uma variável de ambiente e o truque 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
)
Note que é crítico que o caso da variável FOR seja diferente da variável de ambiente. As variáveis FOR diferenciam maiúsculas de minúsculas, as variáveis de ambiente não são. Se você usar c
para ambos, o analisador tratará %%c%%
como a variável FOR seguido por um percentual - não o que você deseja.