Существует одна серьезная проблема с вашим кодом, и она не имеет ничего общего с пробелами в имени процесса.
Когда вы запускаете tasklist /NH
каждая возвращаемая строка - это больше, чем просто имя процесса:
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
Итак, вы пытаетесь взять строку вроде:
System Idle Process 0 Services 0 24 K
(что соответствует %%x
), и посмотрите, равно ли оно указанному имени процесса (то есть: System Idle Process
).
Из-за дополнительной информации, представленной в каждой строке, она никогда не будет равной, поэтому вам нужно найти способ получить список (или извлечь из него) только имена процессов.
Также:
set "EXE=My Process.exe"
не нуждается в кавычках. Он знает, что все в строке после знака равенства является значением, присваиваемым переменной, названной слева. Так что set EXE=My Process.exe
будет работать нормально, даже с пробелами.
Включение кавычек вокруг части значения (как предлагается в комментариях) является обычным способом разделения строк, но поскольку Set не основан на типах (он не знает строки из числа из треугольника и т.д.), Он будет включать цитаты. Так что set Filename="My Name"
означает, что значением имени файла теперь является "My Name"
, включая кавычки. Это может сбить с толку / сломать вещи при попытке использовать его позже (между другими кавычками в других командах и т.д.).