Ayuda con un Error en Batch

Iniciado por Black_Phoenix, 19 Junio 2018, 04:35 AM

0 Miembros y 1 Visitante están viendo este tema.

Black_Phoenix

Hola gente de Elhacker.net, tengo un problema... ;D :( :-\

Necesito una ayuda con el Batch, estoy aprendiendo algo de programación y decidí empezar con algo básico, Batch, lo que sucede es que me hice un archivo para matar procesos solo con escribir el nombre del programa, por ejemplo: Chrome =>  Se cierra chrome.exe y por lo tanto el programa de google chrome. Pero por ejemplo en el programa incluyo una función para cerrar el proceso de Spotify y que si es otra palabra o letra que no sea "Spotify" el programa envié un mensaje que diga "Opción no valida" lo que sucede es que cuando escribo algo al azar como "fazer" me ejecuta la opción de cerrar Spotify, cosa que no quiero que suceda, por suerte cuando pongo Chrome o Discord por ejemplo, no tengo el problema, otro problema es que después de que se cierra el programa que indico debe aparecer una opción que diga "Desea Terminar otro Proceso? [Y/N]" y que si la respuesta no es "Y" o "N" entonces que diga igual "Opción no valida" pero simplemente se sale. :-\ :-\

Les adjunto el código que use para que me digan si tiene algo mal, gracias y me disculpo si no me exprese bien o no me di a entender.@echo off
TITLE END PROCESS PRTOCOL
COLOR 07
echo Protocolo de Terminacion de Procesos Activado
echo.
echo.
echo Escriba el nombre de alguno de los siguientes procesos a Terminar...
echo.
echo -Chrome
echo -Spotify
echo -Discord
echo -Tor Browser
echo -Steam
echo -Skype
echo -Roblox
echo -Team Viewer
pause>nul
:CHJ
cls
echo ???
set/p JK=
if %JK%==Spotify goto Spo else goto CHW
if %JK%==Chrome goto C else goto CHW
if %JK%==Discord goto D else goto CHW
if %JK%==Tor Browser goto Tor else goto CHW
if %JK%==Steam goto Ste else goto CHW
if %JK%==Skype goto Sky else goto CHW
if %JK%==Roblox goto R else goto CHW
if %JK%==Team Viewer goto TV else goto CHW
:Spo
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM Spotify.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:C
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM chrome.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:D
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM Discord.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:Tor
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM firefox.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:Ste
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM Steam.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:TV
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM Team Viewer.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:Sky
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM Skype.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:R
echo Terminando Proceso...
timeout /t 3 /nobreak >nul
taskkill /f /IM RobloxPlayerBeta.exe >nul
taskkill /f /IM RobloxPlayerLauncher.exe >nul
echo Proceso terminado con exito :)
timeout /t 1 /nobreak >nul
echo ...
timeout /t 1 /nobreak >nul
goto A
:kxc
echo Opciàn no Valida
echo.
goto A
:CHW
echo Opciàn no Valida
echo.
goto CHOOSE
:A
echo Desea Terminar otro proceso? [Y/N]
set/p OPC=
if %OPC%==Y goto CHJ else goto kxc
if %OPC%==y goto CHJ else goto kxc
if %OPC%==N exit else goto kxc
if %OPC%==n exit else goto kxc

Cabe destacar que yo revise el codigo bien, no se si me salte algo o simplemente tuve un error del que no me percate.

Gracias y espero que me puedan ayudar con este problemita que me surgio ;D

Eleкtro

#1
Por donde empezar... hay muchas cosas incorrectas en el código. Lo más llamativo es que haces una repetición abusiva e innecesaria de código al escribir bloques de rutinas idénticas para hacer lo mismo solo que cambiando el nombre del proceso, en lugar de eso puedes escribir solamente una rutina, llamarla con el comando CALL y pasarle como argumento el nombre del proceso.

Aparte de lo que te funciona mal, los fallos de sintaxis del código como por ejemplo comparar cadenas de texto con espacios en blanco sin encerrar dichas cadenas, y lo que no logras saber como hacer, aparte de todo eso yo para empezar no entiendo por que tu idea inicial fue limitar el funcionamiento del código a un par de nombres de procesos contados, cuando en realidad puedes permitir que se escriba cualquier nombre de proceso, y así consiguirías un código más util y que requiera menos mantenimiento en futuras actualizaciones.

Esta sería una manera en la que podrías hacerlo:

Código (dos) [Seleccionar]
@Echo OFF & (CHCP 1252)1>NUL
TITLE END PROCESS PROTOCOL
COLOR 07

:Main
CLS

:: Print information.
Echo:Protocolo de Terminacion de Procesos Activado
Echo+
Echo+
echo Escriba el nombre de alguno de los siguientes procesos a terminar...
Echo+
Echo:-Chrome
Echo:-Spotify
Echo:-Discord
Echo:-Tor Browser
Echo:-Steam
Echo:-Skype
Echo:-Roblox
Echo:-Team Viewer
Echo+
SET /P "processName=> "
(Echo "%processName%"|Find.exe /I ".exe")1>NUL || (Set "processName=%processName%.exe")

:: Get running process count.
For /F %%# In ('TaskList.exe /FO "CSV" ^| Find.exe /I /C """%processName%"""') DO (
 Echo+
 Echo:%%# proceso^(s^) encontrado^(s^) con nombre "%processName%"
 If %%# EQU 0 (GoTo :Continue)
)

:: Kill processes.
(TaskKill.exe /F /T /IM "%processName%") 1>NUL && (
   Echo+
   Echo:Todos los procesos con nombre "%processName%" han sido terminados con éxito.
) || (
   REM Echo+
   REM Echo:Fallo al intentar terminar alguno de los procesos con nombre "%processName%"...
)

:Continue
Echo+
Choice.exe /C "YN" /M "Desea terminar otro proceso?"
If %ERRORLEVEL% EQU 1 (GoTo :Main)
Exit /B 0


Saludos.