Хорошим решением является сохранение коммутатора в ADS
(альтернативный поток данных) в самой летучей мыши (будет работать, только если ваша файловая система NTFS
):
Вы просто получите предупреждение file not found
при первом запуске, пока он может найти поток ADS
, но после этого он будет создан
@echo off
set "$activ="
set /p $activ=<%~nx0:activ
if not defined $activ (
echo speaker>%~nx0:activ
set "$activ=speaker"
)
echo actual [%$activ%]
if /i "%$activ%"=="speaker" (
nircmd.exe setdefaultsounddevice "Headset"
echo headset>%~nx0:activ
) else (
nircmd.exe setdefaultsounddevice "Speakers"
echo speaker>%~nx0:activ
)
РЕДАКТИРОВАТЬ: Спасибо @aschipfl
вот решение, чтобы избежать первого запуска Предупреждение
@echo off
set "$activ="
2> nul (set /P $activ= < "%~nx0:activ") || set "$activ=speaker"
echo actual [%$activ%]
if /i "%$activ%"=="speaker" (
nircmd.exe setdefaultsounddevice "Headset"
echo headset>%~nx0:activ
) else (
nircmd.exe setdefaultsounddevice "Speakers"
echo speaker>%~nx0:activ
)
очень просто и не требует никакого временного файла и не имеет ограничения вызовов