Ultimamente me surge la necesidad de crear pequeños programitas para hacer tareas rapidas que me automaticen una serie de tareas que me suelen parecer pesadas de hacer a mano.
El batch es un lenguaje que facilmente te permite hacer este tipo de cosillas en pocos minutos y sin complicarse la vida con otros lenguajes mas complejos.
Ya postee un dia el CHange WallPaper (CHWP) y ahora os dejo 4 cosas muy especificas que quiza nadie tenga necesidad de usar pero que pueden ser interesantes para alguno.
Todos los programas son codigo abierto, todo el mundo puede copiar, modificar o fumar el codigo fuente. Puede incluso modificarlo y publicarlo como suyo donde le de la gana si hacer constancia de su autor original (yo).
AHi van 3 miniprogramas:
------------------------------------------------------------------------------------------------
1) Personal Shell Launcher.
Descripcion: Odio que cada vez que abra la shell de windows XP me salga en la esquina superior derecha el siguiente mensaje:
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
Bien, se me ocurrio la idea de que como ultimamnete casi trabajo mas por shell que por el entorno grafico, hacerme un lanzador de shell personalizado. Asi dejo un acceso directo en el escritorio al batch lanzador (con el icono del cmd) y con una configuracion abreviada de teclas personalizada (Shift+Ctrl+Alt+F2) la invoco cuando me venga en gana.
Ademas, puedo hacer que se quite ese odioso mensaje y poga uno mas apropiado a mis necesidades y gustos, en mi caso me da la hora, el dia y me invita a que aproveche el tiempo (cuando vayais a la uni lo entendereis ) ^^
Necesitamos 2 scripts en batch. Si alguien logra hacerlo con uno que me avise, pq aunque no me he esforzado demasiado en lograrlo, lo cierto es que no lo he conseguido.
Primer bat, el que se invoca:
shlaunch.bat
@echo off
:: Lanza la shell.
start /B C:\Migue\Archivos\bin\customMsg.bat
Evidentemente esta adaptado a mi ordenador, puedes modificarlo ocmo te de la gana.
Segundo bat, que debe de estar en un directorio incluido en el PATH:
customMsg.bat
@echo off
:: Mensaje de bienvenida.
echo Migue's Sony Vaio terminal
echo Hoy es un alegre %date%
echo Son las felices %time:~0,5%
echo Aprovecha el tiempo!
exit /B
----------------------------------------------------------------------------------------------
2) Launch MAME
El MAME (Multi ARcade Machine Emulator) es el emulador por excelencia de juegos de recreativas antiguos y no tan antiguos. Es una maravilla de programa gratuito que antiguament tenia un interfaz grafico pero ahora (yo lo prefiero asi) funciona por consola en un modo menos intuitivo.
Yo que soy un viciado y cuando tenia 15 aÑos me dejaba mogollon de monedas de 25 pesetas en partidas en el bar con los colegas, en un acto de nsotalgia me baje la ultima version y, como ya no va eso de hacer click y lanzar la rom, pues me hice un script para automatizar el proceso. Asi cada vez que quieor jugar, abro la shell y como el .bat esta en un directorio incluido en el PATH, no tengo mas que teclear el nombre de mi programa sin argumentos para que me despliegue las roms instaladas. Hace exactamente lo mismo si le paso un argumento incorrecto. Finalmente, si le paso un argumento correspondiente a la lista de roms, lanza el mame con la rom seleccioanda, y finalmente tras la ejecucion del MAME vuelve al directorio al que se encontraba antes de ejecutar, sin que el usuario note ningun cambio.
aqui os dejo el programa, podeis modificarlo y adaptarlo a vuestros directorios y roms particulares. De paso os dejo la lista de las que son para mi las mejores roms del mame:
lmame.bat
@echo off
:: Comprobacion del argumento.
if .%1.==.. (goto listaRoms) else (goto launchRom)
::Lista las roms instaladas.
:listaRoms
echo Uso lmame [1..7]
echo.
echo Listado de Roms:
echo 1 -^> Metal Slug
echo 2 -^> Metal Slug 2
echo 3 -^> Pang 3
echo 4 -^> Snow Bros
echo 5 -^> Snow Bros 2
echo 6 -^> Street Fighter Alpha 3
echo 7 -^> Parodius
echo 8 -^> 1943
echo 9 -^> Three Wonders
echo 10 -^> Dynablast
echo 11 -^> Sonic
echo 12 -^> Final Fight
exit /b 0
::Lanza la rom seleccionada.
:launchRom
if .%1.==.1. goto uno
if .%1.==.2. goto dos
if .%1.==.3. goto tres
if .%1.==.4. goto cuatro
if .%1.==.5. goto cinco
if .%1.==.6. goto seis
if .%1.==.7. goto siete
if .%1.==.8. goto ocho
if .%1.==.9. goto nueve
if .%1.==.10. goto diez
if .%1.==.11. goto once
if .%1.==.12. goto doce
echo Error: Rom inexistente
echo.
goto listaRoms
:uno
set rom=mslug
goto Fin
:dos
set rom=mslug2
goto Fin
:tres
set rom=pang3
goto Fin
:cuatro
set rom=snowbros
goto Fin
:cinco
set rom=snowbro2
goto Fin
:seis
set rom=sfa3
goto Fin
:siete
set rom=parodius
goto Fin
:ocho
set rom=1943
goto Fin
:nueve
set rom=3wonders
goto Fin
:diez
set rom=dynablst
goto Fin
:once
set rom=mp_sonic
goto Fin
:doce
set rom=ffight
goto Fin
:Fin
pushd C:\Migue\Entretenimiento\MAME
mame -joystick %rom%
popd
exit /b 0
----------------------------------------------------------------------------------------------------
3) Set Java Project
Resulta que los que trabajamos con el entorno de programacion para java eclipse, podemos ejecutar desde ahi mismo los programas que creamos ya que el magnifico entorno tiene un una consola propia integrada.
Una de las cosas que me molesta de dicha consola es que ordena la salida segun le viene en gana de manera que la salida de error la muestra antes o despues que la salida completa. Estoy haciendo un proyecto en el que el orden de dicha salida es necesario que se respete ya que el proyecto es un analizador sintactico y para probar su correcto funcionamiento tengo que forzar errores para ver si ante errores sintacticos mi programa respodne bien. Para ello me vi obligado a ejecutar para las pruebas mi programa en la consola y como la jerarquia de directorios del elipse no incluye el fichero compilado .class en el CLASSPATH, cada vez que queira ejecutar ese o cualquier otro programa desde la consola tenia que incluir en el CLASSPATH el directorio donde se encontraba el binario.
Me hice pues un pequeño programita en batch que lo unico que hace es agregar al CLASSPATH el workspace que yo quiera, mostrando un error si el proyecto no existe y el uso del programa si este se invoca sin argumentos. Una vez se agrega el proyeco al CLASSPATH, informa de que la operacion termino ocn exito y tan solo resta escribir en la consola: java y el nombre de la clase (sin .class) que tiene el procedimiento main (y sus argumentos si los necesita) para que este sea ejecutado.
setJava.bat
@echo off
if .%1.==.. (goto Uso) else (goto Set)
:Set
if not exist C:\Migue\Uni\Programacion\Java\%1 goto Error
set CLASSPATH=C:\Migue\Uni\Programacion\Java\%1\bin
echo Proyecto %1 agregado al ClassPath.
goto :Fin
:Error
echo Error: El proyecto %1 no existe.
exit /b 1
:Uso
echo setJava ^<Nombre de proyecto^>
:Fin
exit /b 0
----------------------------------------------------------------------------------------------------
Si alguien tiene una duda sobre algun mandato utilizado, solo tiene que preguntar. Con este post pretendo demostrar la utilidad REAL del batch scripting, capaz de hacer no solo virus sino programas que nos faciliten la vida, automaticen tareas etc...
Los batch puede que quiza sean mejorables pero mantienen mucha coherencia metodologica, son programas rapidos y limpios que no usan cosas innecesarias y simplemnte funcionan bien y hacen lo que tienen que hacer sin provocar errores o sobrecargar la consola.
Si una sola persona aprende algo con esto me sentire simplemnete satisfecho.
a sabes que podeis modificar y adaptar todos ellos a vuetsras neesidades. Ya vere si mas adelante publico cosas mas elaboradas.
Un saludo a to2