¿Quieres registrarte?

Programación avanzada de archivos en lotes .bat

Por: JaLeRu
5 de Diciembre del 2007
1613 de clabLevel
Otros artículos de JaLeRu
86,039 visitas

Esta es la segunda parte de mi tip Programación Batch con archivos .bat, así que te recomiendo leerlo si es que no estas instruido en el tema.

A continuación veremos los siguientes temas:



Uso de etiquetas


Como bien sabemos la lectura de los códigos Batch se leen de una manera lineal, pero existe una forma para que el Batch se salte lineas, o vuelva a alguna anterior. Esto se logra con Etiquetas y la función GOTO.
Para crear una etiqueta solo debemos escribir:

Código :

:nombreEtiqueta

Dos punto (:) seguido del nombre que le daremos a la etiqueta. De esta manera el GOTO funciona escribiendo

GOTO seguido del nombre de la etiqueta, como vemos en el siguiente ejemplo.

Código :

@echo off
goto :mietiqueta
echo ¿Por que me saltan?
:MiEtiqueta
echo Hola, esta es la etiqueta y nos saltamos una parte del codigo.
pause>nul
exit


Dato Interesante:
En Batch las Mayúsculas y Minúsculas no se diferencian.


Condicionales:


El primer condicional que veremos el más usado.
IF:
Se puede ocupar para comparar, cadenas, números o para saber si existen archivos.
Ejemplo de sintaxis, if %cadena1% == %cadena2% OrdenAEjecutar
Que se podría leer de la siguiente manera. Si cadena1 es igual a Cadena2 ejecutemos la Orden OrdenAEjecutar.
También existe el NOT para ver si no son iguales.
if not %cadena1%== %cadena2% ejecutarAccion
Para saber si un archivo existe, se usa:
if exist "NombreDelArchivo" AccionAEjecutar
o también para ver si NO existe:
if not exist "NombreDelArchivo" AccionAEjecutar

No solo se puede ocupar el signo == para hacer comparaciones.
EQU, que es el equivalente a ==
NEQ, Sirve para cuando queremos ver Desigualdad.
LSS, Para verificar si el numero es Menor
LEQ, Para verificar si es menor o igual.
GTR, Si es mayor
GEQ, Si es Mayor e igual.

Un ejemplo de esto seria:

Código :

if 5 GTR 4 echo Hola

FOR:
Nos sirve para repetir un comando varias veces, en distintas variables.
Un ejemplo, es este:
for /L %%i IN (0,1,21) DO (echo %%i)
En donde /L es para especificar que nuestro for se basara en un conteo de números.
Aquí se repetirá un Echo, que imprimirá números del 0 al 21.
%%i sera el nombre de la variable que almacenara datos
in (0,1,21) aquí especificamos que se repetirá del 0 al 1 y del 1 al 21.
do (echo %%i) Esto es la función que se ejecutara en cada repetición del comando, en este caso un echo que imprimirá la variable.
Batch en algunos casos SI reconoce entre mayúsculas y minúsculas, como en el caso de la variable %%i si esta se llamara %%I no seria reconocida como la misma.


Otro uso que puede ser aplicado en el FOR es el listado de carpetas o archivos, como veremos a continuación:
Listado de archivos:

Código :

@echo off
FOR %%x in (a*) DO echo %%x
pause

Este código, listaría todos los archivos que comienzan con A.
¿Por que? * (asterisco) es un signo comodín, por lo cual al poner a*, estamos diciendo cualquier archivo que tenga una A delante y luego cualquier cosa.
Otro ejemplo del uso de comodín, es listar archivos con extensión común como seria este:

Código :

@echo off
FOR %%x in (*.jpg) DO echo %%x
pause

Aqui nos estaria listando todos los archivos que tengan la extensión .jpg

Listado de Carpetas:
FOR /D %%x in (a*) DO echo %%x
Es casi lo mismo anterior, tan solo que al indicar /D solo se aplica a directorios.
Si quisiéramos que se listaran los directorios, juntos a los directorios que tienen estos dentro se ocupa /R
FOR /R /D %%x in (a*) DO echo %%x

y si quisiéramos listar todos los documentos que están dentro de una carpeta contando los que están dentro de carpetas se ocupa solamente /R (Sin /D)
FOR /R %%x in (a*) DO echo %%x

Con esto creo que tenemos lo básico, y más importante de los condicionales. Talvez otro claber se anime a profundizar más en el tema.

Creación de Menús:


Como ya vimos Condicionales y Etiquetas les enseñare una manera de hacer Menús.
Comenzaríamos indicando las instrucciones y las opciones, de esta manera:

Código :

@echo off
:Menu
cls
echo Seleccione su opcion tecleando el numero respectivo.
echo.
echo 1. Primera Opcion
echo 2. Segunda Opcion
echo 3. Salir


Luego para seguir ocuparíamos esto:

Código :

set /p var=
if %var%==1 goto :Primero
if %var%==2 goto :Segundo
if %var%==3 goto exit
if %var% GTR 3 echo Error
goto :Menu

Con esto damos una variable en la que se guardara el numero insertado para luego ser verificado por los condicionales, si el numero es mayor que 3 nos avisara que no existe esa opción. También al principio cree una etiqueta para que se pueda volver

al menú y un "cls" para limpiar la pantalla.
Para terminar creamos las respectivas etiquetas.

Código :

:Primero
cls 
color a
Echo Esta es la Primera Opcion
Echo Precione una tecla para volver al menu
Pause>Nul
goto :Menu
:Segundo
cls 
color 1a
Echo Esta es la Segunda Opcion
Echo Precione una tecla para volver al menu
Pause>Nul
goto :Menu


Quedando para terminar nuestro codigo así:

Código :

@echo off
:Menu
cls
echo Seleccione su opcion tecleando el numero respectivo.
echo.
echo 1. Primera Opcion
echo 2. Segunda Opcion
echo 3. Salir
set /p var=
if %var%==1 goto :Primero
if %var%==2 goto :Segundo
if %var%==3 goto exit
if %var% GTR 3 echo Error
goto :Menu
:Primero
cls 
color a
Echo Esta es la Primera Opcion
Echo Precione una tecla para volver al menu
Pause>Nul
goto :Menu
:Segundo
cls 
color 1a
Echo Esta es la Segunda Opcion
Echo Precione una tecla para volver al menu
Pause>Nul
goto :Menu

Bueno, con eso les basta para imaginarse como crear sus menús personales.
Como vieron puede cada sección tener su color, incluso puedes cambiar la barra de titulo.
Ve probando, no pierdes nada.

Apagado y Reiniciado de Pc:


Una cosa muy interesante que puedes hacer con Batch es Apagar y Reiniciar tu Pc, incluso programarlo para que apague a la hora que desees.
Es notablemente fácil.
se ocupa de la siguiente manera el apagado.
shutdown -s -t Tiempo -c "Comentario"
donde -s significa que lo apagaremos, -t debe ir seguido de los segundos que demorara apagar. En windos XP mostrara un contador, con el comentario que va luego de -c, pero en Windows Vista no abra ni un contador, solamente saldrá una alerta con el Comentario, que ni siquiera es obligatorio.
Bueno, de seguro quieres hacer la prueba. La puedes hacer pero antes de eso te recomiendo que leas lo siguiente.
Puedes cancelar el apagado (Antes de que el contador termine) solamente escribiendo shutdown -a ya sea en un archivo de texto con extensión bat, como en el mismo Shell.
Entonces, pues has la prueba

Código :

shutdown -s -t 999999 -c "Esto se esta apagando"

Tendrás suficiente tiempo para ejecutar el siguiente código. (11 días :lol: )

Código :

shutdown -a

Con esto ya probamos los dos y podemos ser felices.
Ok, si en vez de ocupar -s usas -r el PC se reiniciara.
También puedes forzar el cierre de los programas, para que no de tiempo de guardar nada. Tan solo ocupando -f
Un ejemplo de un Pc, que se Apaga Forzosamente y que puede dañar el pc y luego se reinicia es este:

Código :

shutdown -r -f -t 0 -c "Bye"

(No lo recomiendo probar en tu pc, Ya que apaga el pc en 0 segundos sin preguntar nada. )
Para programar un apagado lo veremos al final en los Datos Extras, ya que con la función AT puedes programar el apagado.


Leer archivos externos:


Para leer un archivo externo con Batch, como un archivo de texto por ejemplo. Se usa el siguiente código:

Código :

type "NombreDelArchivo.txt"

¿Simple no?

Insertar al Registro:


Insertar al registro tu Batch puede ser muy útil, la verdad yo no entiendo mucho del registro pero leí un poco y aquí tienen un ejemplo que se encuentra a ser sincero en muchas web. Donde aremos que nuestro batch se ejecute con el Sistema.

Código :

REG ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v MIBATCH.bat /t REG_SZ /d 

C:\MIBATCH.bat


Con la función REG ADD Agregamos algo al registro. Con otros comando podemos borrar.
Lo que sigue es la "Dirección" de donde insertaremos el registro que en este caso sera para que nuestro batch se ejecute al iniciar Sesión.
En medio de toda la dirección se puede leer MIBATCH.bat yo puse el nombre del Batch pero también se puede poner cualquier otra cosa. Más adelante donde dice C:\MIBATCH.bat, es la dirección completa de donde esta nuestro Batch.
Con solo esta linea estamos listos. Haz la prueba!

Otras cosas útiles:


Para terminar hablare de pequeñas funciones que pueden ser de utilidad.

Msg
Esta función tiene otras utilidades, pero les enseñare esta que no funciona en todos los PC.
Sirve para abrir una alerta con un mensaje su utilización es la siguiente:

Código :

msg * EsteEsMiMensaje


AT
Esta es una de las que más me gusta, es para programar alguna acción a cierta hora.
Ejemplo:

Código :

At 20:00 msg * Son Las 8 de la noche

Con esto a las 20:00 nos aparecerá un mensaje que nos dirá que son las 8 de la Noche.
También puedes programar un apagado o cualquier Cosa.
Si la hora que das ya paso, se tomara como para el día siguiente.

Creo que he terminado, me costó un poco. Ojala no me haya faltado nada. Disfrútenlo y seria bueno que los Clabers aporten con más información. Yo creo que seria útil para todos, incluyéndome.
Suerte.

 


También te interesa


Etiquetas hack

Comentarios | Enviar un comentario
Se ve bien... Tambien...
(y)
Por: M@U
como puedo renombrar un archivo poniendole de nombre la fecha_completa del sistema ?
Por: Alote
Una cosa que no sabia, y no funciona.

La funcion "msg * Mensaje" me lanza el siguiente error: 'Error 1702 al obtener los nombres de las sesiones'

Alguna idea?
Por: DooBie_blog
Msg
Esta función tiene otras utilidades, pero les enseñare esta que no funciona en todos los PC.
Sirve para abrir una alerta con un mensaje su utilización es la siguiente:


Tal vez no funcione en tu Pc.
Por: JaLeRu
Es verdad JaLeRu depende mucho de la version de Windows que tengas.
En fin, exelente Tip JaLeRu y ya me toca el siguiente Tip: "Programación experta de archivos de lotes .bat"
Queda apartado.
Por: Kinduff
Lo del "At" me parece una manera útil de ponerte alarmas mientras te quedas horas trabajando en el PC. Excelente compendio de tips Jaleru U_U
Por: DanielSemper
Me gustó mucho JaLeRu. Muy útil, como dice semper, eso del At está c00l.

Sin embargo me gustaría saber si se puede hacer un IF con el contenido de un archivo. Es decir, si haces el "type", lo que muestra es el contenido del archivo en la consola. Lo que digo es que por ejemplo, que si en el archivo hay un 1 o un 0 escrito, pues que haga una cosa u otra dependiendo.
Por: Bleend
Ya que son "gomosos" a la Programación BATCH.. cosa que no veía desde la universidad..aqui les dejo una dirección(ya que me da pereza hacer tutoriales aunque se que toca aportar a la comunidad..pero si ya esta hecho..)les dejo un excelente tutorial..
http://foro.elhacker.net/index.php/topic,132924.0.html
Por: vanvanero_blog
Quisiera saber, si puedo hacer un .bat que me copie lo que tengo en el clipboard de un texto para luego salvarlo a un TXT con un nombre de archivo que va cambiando cada dia, es que tengo que hacer un reporte diario de llamadas y necesito agilizarlo un poco.

Gracias de antemano!
Por: rAbreu_blog
Esto tambien funciona en Windows Vista?
Y sabes hacer autoejecutables?

Gracias y felicidadez
Por: quien yo_blog
Te quedo de lujo el tip, felicidades, esto si q sirve de mucho ^^
Por: Otaku RzO
Este manual es bastante interesante y útil, sin embargo simpre me he preguntado si se puede cerrar un programa específico de windows desde un archivo . bat
Por: Gabriel Arce_blog

Código :

taskkill /im /f programaespecifico.exe

Ya esta especificado.

Ejemplo:
escribe en un archivo *.bat

Código :

taskkill /f /im wmplayer.exe

Si lo abres y tienes el reproductor de audio windows. Este se cerrara.
Por: JaLeRu
Si no te fijaste esta era la segunda parte, leete la primera. Aquí se explicaba el uso de taskkill.
http://www.cristalab.com/tips/48410/programacion-batch-con-archivos-.bat
Por: JaLeRu
Disculpen, pero como puedo modificar claves del Regedit?

Conozco la función para crearlas, con add, pero no sé cómo modificarlas...

Muchas Gracias
Por: najm

najm :

Disculpen, pero como puedo modificar claves del Regedit?

Conozco la función para crearlas, con add, pero no sé cómo modificarlas...

Muchas Gracias
Inicio, Ejecutar -> Regedir.

Ahí tienes el editor, no hace falta que crees archivos *.reg
Por: Bleend

Bleend :

Inicio, Ejecutar -> Regedir.
*Regedit
Por: Bleend
Se debe estar preguntando como se modifican con Bat.
escribe en el Shell:
reg/?
y te saldrá todo lo que necesitas.
Por: JaLeRu
Hola! Espero que alguien me pueda ayudar. Mi problema es el siguiente:
Tengo un programa de vb que llama a un archivo .bat, y le pasa unos parametros. La cuestion es como cojo yo desde el .bat esos parametros. Para ser más exactos le paso un usuario, una contraseña y un el nombre de un archivo a duplicar. Y el .bat tiene una ip, user=' ', password=' ' text.txt . Lo que pasa es que el user no siempre será el mismo, entonces no se como lo puede recoger el .bat.
No se si me he explicado muy bien, pero espero que alguien me pueda ayudar. Gracias
Por: patry_blog

patry_blog :

No se si me he explicado muy bien
Errr... Pues no. ¿La información se la envías desde el programa en VB al Bat o viceversa? Como sacas la información? :?
Por: Bleend
la informacion la envio desde el programa de vb al .bat. Desde el programa le paso los parametros pero nose como recibirlos en el .bat
Por: Patry_blog

Patry_blog :

la informacion la envio desde el programa de vb al .bat. Desde el programa le paso los parametros pero nose como recibirlos en el .bat
Pues no lo se, pero podróias probar de escribirlos en un txt y que el bat los leyera, que eso si se puede hacer. :?
Por:
Ese fui yo
Por: Bleend
Gracias por la idea!
Por: patry_blog
no se si sea muy tarde, pero
para Patry_blog,

si llamas al batchfile asi:

batch.bat argumentos1 otroargumento

puedes usar las variables %1 y %2 para los argumentos (no se cual sea el maximo)
Por: elpacko_blog
la el codigo que pusiste para agregar una entragda al registro esta mañ
Por: lolo_blog
hola
como puedo poner dis sentencias dentro de un if en batch
Por: victor_blog
dos sentencias en un if en batch
Por: victor_blog
No hay una comando para guardar lo que el usuario asigno a una variable en un archivo de texto pero que cada vez que lo ejecuten, agregue la información de la variable al mismo archivo texto sin sobre escribirlo
Por: DRK_blog
una pregunta ? un archivo bat puede hacer lo que hace el virus sesser, osea sintetisando lo explico busca direccciones de ip y se autocopia en otras pc y usa la vulnerabilidad del l.sass y reinicia la pc por siempre desde la shell
Por: bylly_blog
jaleru porque cerraron el otro foro
me pasarias tu mail de msn asi hablamos
Por: mauricio_blog

mauricio_blog :

jaleru porque cerraron el otro foro
me pasarias tu mail de msn asi hablamos

Para ser sincero, no te pasaría mi mail.
Mi mail personal es solo para conocidos de carne y hueso. Y unos muy poco privilegiados ciberneticos.
Me puedes mandar mails al mail de mi usuario de clab que puedes verlo viendo mi perfil, pero que no escribire por razones fuera de tus conocimientos, los contesto...con poca frecuencia... pero lo hago.
Por: JaLeRu

JaLeRu :

mauricio_blog :

jaleru porque cerraron el otro foro
me pasarias tu mail de msn asi hablamos

Para ser sincero, no te pasaría mi mail.
Mi mail personal es solo para conocidos de carne y hueso. Y unos muy poco privilegiados ciberneticos
Errr ...pues lo tienes publico debajo de tu firma y en tu perfil.
Por: Bleend

Will it Bleend? :

JaLeRu :

mauricio_blog :

jaleru porque cerraron el otro foro
me pasarias tu mail de msn asi hablamos

Para ser sincero, no te pasaría mi mail.
Mi mail personal es solo para conocidos de carne y hueso. Y unos muy poco privilegiados ciberneticos
Errr ...pues lo tienes publico debajo de tu firma y en tu perfil.


:shock: juassssssssssssssssssssssssssssssssssssssssssssssssssssssss :shock:

XD :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Por: jpcw

jpcw :

Will it Bleend? :

JaLeRu :

mauricio_blog :

jaleru porque cerraron el otro foro
me pasarias tu mail de msn asi hablamos

Para ser sincero, no te pasaría mi mail.
Mi mail personal es solo para conocidos de carne y hueso. Y unos muy poco privilegiados ciberneticos
Errr ...pues lo tienes publico debajo de tu firma y en tu perfil.


:shock: juassssssssssssssssssssssssssssssssssssssssssssssssssssssss :shock:

XD :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

Ese no es mi mail.
Ese es el mail de mi perfil. Ese es HOTMAIL. xD
Es un mail que hice para inscribirme en webs y así no me llegue Spam.
Igual así cada cierto tiempo lo leo, por que me llegan mails de gente que ve mi mail en Internet y me quiere consultar cosas.
Por: JaLeRu

JaLeRu :


Me puedes mandar mails al mail de mi usuario de clab que puedes verlo viendo mi perfil, pero que no escribire por razones fuera de tus conocimientos, los contesto...con poca frecuencia... pero lo hago.

Creí que con eso se habría entendido.
No lo quiero escribir, por que he leido que si escribes tu mail en foros o cosas así tienes mas opciones de que te llegue aun más Spam.
Por: JaLeRu
Deja un comentario
IMPORTANTE

Este mensaje ha sido cerrado; si deseas participar en la discusión o hablar de otro tema relacionado, hazlo en los foros de Cristalab