Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Black_Phoenix en 19 Junio 2018, 04:35 am



Título: Ayuda con un Error en Batch
Publicado por: Black_Phoenix en 19 Junio 2018, 04:35 am
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.
Código:
@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


Título: Re: Ayuda con un Error en Batch
Publicado por: Eleкtro en 19 Junio 2018, 18:17 pm
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
  1. @Echo OFF & (CHCP 1252)1>NUL
  2. TITLE END PROCESS PROTOCOL
  3. COLOR 07
  4.  
  5. :Main
  6. CLS
  7.  
  8. :: Print information.
  9. Echo:Protocolo de Terminacion de Procesos Activado
  10. echo Escriba el nombre de alguno de los siguientes procesos a terminar...
  11. Echo:-Chrome
  12. Echo:-Spotify
  13. Echo:-Discord
  14. Echo:-Tor Browser
  15. Echo:-Steam
  16. Echo:-Skype
  17. Echo:-Roblox
  18. Echo:-Team Viewer
  19. SET /P "processName=> "
  20. (Echo "%processName%"|Find.exe /I ".exe")1>NUL || (Set "processName=%processName%.exe")
  21.  
  22. :: Get running process count.
  23. For /F %%# In ('TaskList.exe /FO "CSV" ^| Find.exe /I /C """%processName%"""') DO (
  24.  Echo+
  25.  Echo:%%# proceso^(s^) encontrado^(s^) con nombre "%processName%"
  26.  If %%# EQU 0 (GoTo :Continue)
  27. )
  28.  
  29. :: Kill processes.
  30. (TaskKill.exe /F /T /IM "%processName%") 1>NUL && (
  31.    Echo+
  32.    Echo:Todos los procesos con nombre "%processName%" han sido terminados con éxito.
  33. ) || (
  34.    REM Echo+
  35.    REM Echo:Fallo al intentar terminar alguno de los procesos con nombre "%processName%"...
  36. )
  37.  
  38. :Continue
  39. Choice.exe /C "YN" /M "Desea terminar otro proceso?"
  40. If %ERRORLEVEL% EQU 1 (GoTo :Main)
  41. Exit /B 0

Saludos.