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.