Existe um grande problema com o seu código e não tem nada a ver com espaços no nome do processo.
Quando você executa tasklist /NH
, cada linha retornada é mais do que apenas o nome do processo:
C:\temp>tasklist /nh
System Idle Process 0 Services 0 24 K
System 4 Services 0 2,200 K
smss.exe 400 Services 0 1,232 K
Então você está tentando pegar uma linha como:
System Idle Process 0 Services 0 24 K
(que é o que o %%x
manteria) e veja se é igual ao nome do processo fornecido (por exemplo: System Idle Process
).
Devido à informação extra fornecida em cada linha, ela nunca será igual, então você precisa encontrar uma maneira de adquirir uma lista (ou extrair mais) somente dos nomes dos processos.
Além disso:
set "EXE=My Process.exe"
não precisa das aspas. Ele sabe que tudo na linha após o sinal de igual é o valor a ser atribuído à variável nomeada no lado esquerdo. Então, set EXE=My Process.exe
funcionará bem, mesmo com os espaços.
Incluir as aspas ao redor da parte do valor (como sugerido nos comentários) é a maneira usual de delimitar strings, mas como Set não é baseado em tipos (não conhece uma string de um número de um triângulo, etc.) Incluirá as citações. Então, set Filename="My Name"
significa que o valor do nome do arquivo agora é "My Name"
, incluindo as aspas. Isso pode ficar confuso / quebrar coisas ao tentar usá-lo mais tarde (entre outras citações em outros comandos, etc.).