Sem qualquer identificação do conteúdo do seu arquivo ou dos parâmetros que você está executando este lote, é pura adivinhação, mas eu suspeito que esta linha:
IF "!NUM!"=="" SET NUM="!number!"
que definirá NUM
como um valor entre aspas.
Possivelmente código melhor seria
if not defined num set "num=!number!"
mas também - você está usando um GOTO label
dentro de um SETLOCAL enabledelayedexpansion
que AFAIAA NÃO termina o ambiente LOCAL
, portanto, todo o processamento seria com o SETLOCAL
e delayedexpansion
em vigor. Possível re-executar o SETLOCAL Enable...
várias vezes, construindo maior e maior profundidade do ambiente local .... Melhor IMHO fixo.