Vengo a explicarles lo básico de Batch. Además, pongo un código "autodidacta", que se explica por si solo.
Importante: Recomiendo leer el post entero antes de empezar a actuar.
¿Qué es el "BATCH"?
-El batch (archivo de procesamiento por lotes), es un archivo de texto plano, (es decir, sin tamaños de letra, colores, fuentes). Un archivo batch es un archivo con texto. Ese texto son Comandos de "cmd", de "consola de Windows", de "Símbolo del sistema", que, al iniciar el batch (como si fuera un ejecutable), irá "procesando", "ejecutando" esos comandos, en el orden en el que están. Más adelante veréis a que me refiero con más calma.
-Estos comandos, son los mismos que en el Símbolo del sistema. Éste se puede abrir, llendo a Inicio -> Ejecutar, y ahí escribir: cmd. (Solo en Windows)
¿Cómo hago programas en batch?
-Para ello, necesitaremos un editor de texto sencillo, como es el "Wordpad", o el más sencillo a mi parecer, el "Bloc de notas".
-Vamos a cualquier lugar (Escritorio, carpetas...) y creamos un archivo "*.txt" ("*" se pone cuando ahí cabe cualquier palabra, carácter, etc).
-En él, escribiremos el código, más adelante, y le cambiaremos la extensión a "*.bat".
Si no veis las extensiones, al final del post, diré como ponerlas.
-Una vez que se llama "*.bat" (Ej. Hola.bat), habremos hecho que se convierta en el "ejecutable" (no es realmente un ejecutable) que buscamos.
¿Bueno, supongo que queréis empezar no? Pues a ello, que la práctica es más instructiva
Empezemos con el típico "Hola mundo". Lo más fácil que podeis encontrar.
Escribid en el archivo.txt: (También, si se llama "*.bat", le podeis dar a "editar", en vez de a "abrir", y lo abrireis como si fuera un "*.txt")
Código:
echo Hola mundo
pause
Lo más sencillo que podeis encontraros. Probadlo. Extensión .bat, y le dais a abrir. ¿Está? Pues ya sabeis que hace la primitiva "echo", y la "pause".
Lo metemos un par de cosas, que creo que fácilmente entenderéis, tras probarlo:
Código:
@echo off
echo Hola mundo
pause > nul
El "@echo off" hace que no se muestre toda la línea de dirección, ni los comandos.
Ahora os pongo algo parecido, pero que solo funciona en algunos Windows. ¿Porqué? La línea de comandos, al ir quedando en desusos, se le fueron quitando algunas primitivas y funciones.
Código:
@echo off
msg * Hola a todos
Si no os funciona, revisadlo siempre. Pero en este caso, es muy probable que no funciona. En mi Windows 7, por ejemplo, no tenía esta primitiva. (Se pueden descargar e nstalar, pero no viene al caso)
Ahora os pongo 2 comandos nuevos. Nota: Podéis probar los comandos en el "cmd", así no teneis que cambiar constantemente el .txt. De hecho, si ponéis el comando + "/?" (Quedaría Echo /?), os mostrará la ayuda de el comando, y sus parámetros.
Código:
@echo off
goto segundo
echo Hola
pause
exit
:segundo
echo Adios ;)
pause
exit
Código:
@echo off
echo Hola
pause>nul
cls
echo Hola otra vez :O!
pause>nul
"Cls" borra la pantalla, y "goto nombre" va a una "etiqueta" (:nombre)
Bueno, ahora os pongo el código, que explica un par de cosas más. Os recomiendo poner "help" en el cmd para ver muchos más comandos.
Código:
@echo off
:: esto sirve para que no se muestren las lineas de comando en la ventana del ms-dos.
:: los :: sirven para anotar algo que no quieres que se muestre, como por ejemplo, estas explicaciones que estoy dejando. Se puede poner :: o rem.
echo Hola!!
:: echo ??? sirve para poner un mensaje que se mostrara en la ventana.
echo.
:: echo. sirve para dejar una linea en blanco.
pause
:: al poner pause, el usuario deberá pulsar una tecla para continuar con los comandos, y aparecerá el mensaje que pongas delante (pause el-mensaje) o, por defecto, pulse una tecla para continuar. También se puede poner pause >nul, para que no muestre ningún mensaje (el problema es que el usuario no va a saber que hacer, a no ser que lo especifiques antes, con echo;, por ejemplo.
:1
:: al poner :-algo- (-algo- en este caso es 1) creas una zona, de tal modo que si en algún momento del código, antes o despues de esa zona, pones goto -algo;, el comando volverá a esa zona, repitiendo, o saltando parte del código.
cls
:: el comando cls deja en blanco todo lo que había en la ventana, mensajes, etz.
echo elige que deseas hacer: (pon el número)
echo 1) Apagar, reiniciar.
echo 2) Salir.
echo.
echo.
echo.
set /p numero=Numero que hallas elejido:
:: el comando set; con el parámetro ;/p; crea una variable, donde "numero"; es el nombre de la variable (lo que va después de /p). Lo que hay despues del = es un mensaje, delante del cual el usuario escribirá lo que desée que sea la variable.
if %numero%==1 goto 2
if %numero%==2 goto salir
:: los comandos if %variable%== sirven para decir: si la variable %variable% (siempre entre %x%) es igual a X, iniciar X comando, goto, en este caso.
cls
echo Por favor, poner 1 o 2, según lo que desé.
pause pulse una tecla para volver al menu inicial.
goto 1
:: aquí el comando goto que nos enviará a la "zona" llamada 1.
:salir
exit
:: el comando exit cierra la ventana.
:2
:: otra zona más.
cls
echo apagar (a) o reiniciar (r)?
set /p ar=Letra:
if %ar%==a goto apagar
if %ar%==r goto reiniciar
cls
echo por favor, elija "a" o "r".
pause
goto 2
:: por supuesto, pueden ser colocados todos los goto que se quieran para ir a la misma zona.
:apagar
cls
echo quiere apagar en X tiempo (t) o directamente (d)?
set /p apagar2=Letra:
if %apagar2%==t goto apagart
if %apagar2%==d goto apagard
cls
echo Por favor, elija una de las opciones.
pause
goto apagar
:apagart
cls
echo bien, especifique el tiempo en segundos en que quiera apagar (máx. 600 min. 1) y prepárese.
set /p tiempoapagar=Tiempo:
shutdown -s -t %tiempoapagar%
:: shutdown sirve para apagar (-s), reiniciar (-r), hibernar, etz. tambien se puede poner variables en partes de los comandos. Si ponemos -t # podremos especificar el tiempo en segundos en que se apagará/reiniciará/etz.
exit
:apagard
echo preparese.
pause pulse una tecla para apagar.
shutdown -s -t 1
:: aunque pongo directamente, pongo -t 1 porque hay versiones de sistemas operativos que, si no pones tiempo o hora (también se puede poner la hora a la que hacer shutdown), pone 30 segundos.
exit
:reiniciar
cls
echo quiere reiniciar en X tiempo (t) o directamente (d)?
set /p reiniciar2=Letra:
if %reiniciar2%==t goto reiniciart
if %reiniciar2%==d goto reiniciard
cls
echo Por favor, elija una de las opciones.
pause
goto reiniciar
:reiniciart
cls
echo bien, especifique el tiempo en segundos en que quiera reiniciar (máx. 600 min. 1) y prepárese.
set /p tiemporeiniciar=Tiempo:
shutdown -r -t %tiemporeiniciar%
exit
:reiniciard
echo preparese.
pause pulse una tecla para reiniciar.
shutdown -r -t 1
exit
2º código:
Siempre al principio de un programa mejor:
Código:
@echo off
:iniciocontraseña
:: como este código será para poner una contraseña al principio de un código batch, el nombre de esta etiqueta deberá ser algo complejo, para evitar futuros contratiempos
echo Por favor, ponga la contraseña:
echo.
set /p contraseñaprincipio=Contraseña:
:: y el nombre de la variable más complejo aun.
if %contraseñaprincipio%==lacontraseñaquetuquieras goto inicio
cls
echo CONTRASEÑA INCORRECTA
echo vuelva a intentarlo
pausa
goto iniciocontraseña
:inicio
cls
::código cualquiera
Bueno, decir que estos 2 códigos los tengo desde hace mucho, y no los cambié demasiado, por lo que quizás use una terminología diferente en cada uno. No problema. Si lo entendéis, bien. Si no, decidme que no entendéis, o que os gustaría saber, y os contaré.
Aviso: No voy a dar códigos. Os enseñaré a hacerlos si pidiéseis, pero nada más.
Cabe decir, que el Batch NO es un lenguaje de programación. No confundir.
A mi me sirvió mucho el batch para entender las bases de laq programación. Pero mi consejo es que no os estanquéis en el Batch los que queráis progresar en la programación.
Suerte a todos los que estéis con ello :D