С %ls
вы говорите ему использовать как можно больше широких символов. Знак $
впоследствии игнорируется.
Вместо этого вы хотите, чтобы он сканировал любые широкие символы, кроме знака $
. Поэтому замените s
на [^$]
:
swscanf(L".exe$", L"%l[^$]", name);