Parece que o problema pode ser que ele está chamando a mesma sub-rotina, :2verificacao, independentemente de o primeiro programa (AnyDesk.exe) estar sendo executado.
Tente modificar o seu script da seguinte maneira:
@echo off
set Process=AnyDesk.exe
tasklist | find /i "%Process%" >nul && (
set Processo=TeamViewer.exe
tasklist | find /i "%Processo%" >nul && (
goto :dois_programas
) || (
goto :um_programa
)
) || (
goto :nenhum_programa
)
:dois_programas
echo Ambos os programas estão abertos.
goto :exit
:um_programa
echo Apenas um dos programas está aberto.
goto :exit
:nenhum_programa
echo Nenhum dos programas está aberto.
goto :exit
:exit
pause
O código verificará primeiro se o AnyDesk.exe está sendo executado. Se ele estiver sendo executado, o script verificará se o TeamViewer.exe também está sendo executado. Se ambos estiverem em execução, o script irá para a sub-rotina :dois_programas, que exibirá a mensagem "Ambos os programas estão abertos". Se apenas um deles estiver em execução, o script irá para a sub-rotina :um_programa, que exibirá a mensagem "Apenas um dos programas está aberto". Se nenhum deles estiver em execução, o script irá para a sub-rotina :nenhum_programa, que exibirá a mensagem "Nenhum dos programas está aberto".