en Tutoriales

Lenguaje batch tutorial y comandos básicos .bat

Este es un tutorial sencillo para principiantes en el que se intenta explicar de la forma mas simple los principales comandos.
El lenguaje batch no es muy difícil pero para personas que se estén iniciando puede resultar un poco complicado así que intentare explicarlo de la forma mas sencilla posible.

¿Qué es batch?
Un archivo batch es un archivo de texto sin formato guardado con la extensión bat y que contiene un conjunto de ordenes llamadas comandos de DOS.
en resumen un archivo batch es un archivo de texto en el que se a escrito un conjunto de códigos que van a ser ejecutados de forma lineal (ya lo irán entendiendo con ejemplos mas adelante) y ese archivo de texto debe ser guardado con la extensión .bat, es decir un nombre cualquiera.bat ej: nombredelarchivo.bat

Es muy útil para automatizar tareas, por ejemplo un programa que nos abra todas las herramientas que necesitamos para trabajar en un determinado proyecto, de esta forma cada vez que queramos trabajar solo tendremos que pulsar un botón y no hará falta abrir una a una todas las aplicaciones necesarias, pero su utilidad no se queda en esto, todo hacker debe conocerlo, especialmente su equivalente en linux: los scripts de bash.

La terminación bat viene del propio nombre del lenguaje (batch) que debido a que las extensiones de archivos (.bat, .exe, .txt etc) solo pueden tener 3 letras quedo reducido a eso.

PARTE 1

Lo primero que debemos hacer es abrir un archivo de texto y guardarlo con un nombre seguido de .bat tal como expliqué anteriormente en ese archivo vamos a poner nuestros comandos.

Empecemos quitando el eco, para eso escribimos: @echo off

@echo off
pause
exit

Si no sabes lo que es el eco prueba a quitar @echo off y verás lo que pasa.

Pause sirve para hacer una pausa en la secuencia (pulsa una tecla para continuar)
exit sirve para finalizar

Bien ahora vamos a continuar con otro código: el echo y el echo. (nótese el punto)

El echo sirve para escribir algo en pantalla por ejemplo echo hola escribiría hola en la pantalla
echo. sirve para dejar un espacio

@echo off
echo.
echo Hola TodoHacker
echo.
echo Como estas?
pause
exit

Prueba a ponerlo y comprueba lo que pasa

Es muy importante que vayas entendiendo todo esto paso a paso sino se irá complicando bastante.

Ahora vamor a ver una variacion del pause: pause>NUL, sirve para hacer una pausa sin poner nada en la pantalla podéis probarlo sustituyendo pause por pause>NUL en los códigos anteriores

Esto lo vamos a utilizar para poner nosotros el mensaje que queramos en vez del «pulsa una tecla para continuar»
y lo vamos a hacer poniendo algo seguido de pause>NUL veréis el efecto

@echo off echo. 
echo Pulsa una tecla para ir a la siguiente parte del tutorial de todohacker.com 
pause>nul 
echo. 
echo Bienvenido a la segunda parte del tutorial echo. echo Pulsa una tecla para salir 
pause>nul 
exit

PARTE 2

El comando cls sirve para borrar la pantalla.

@echo off
echo.
echo Pulsa una tecla para ir a la siguiente parte del tutorial
pause>nul
cls
echo.
echo Bienvenido a la segunda parte del tutorial de todohacker
echo.
echo Pulsa una tecla para salir
pause>nul
exit

Este es muy sencillo, ejecútalo y te darás cuenta de su utilidad.

Ahora vamos a pasar a las variables, algo que tienen casi todos los lenguajes de programación y que, como verás, te da infinitas posibilidades.

Una variable es un nombre que designa un valor y como su nombre indica puede variar. Gracias a esto podemos guardar valores y darles nombre.

Para poner una variable debemos escribir se nombrevariable= valor. ej: set nombre= pepito

y para referirnos a esa variable debemos escribir el nombre de la variable entre %% ejemplo: hola %nombre%

@echo off
set nombre= Pepito
echo.
echo Hola %nombre%
echo.
pause
exit

Es muy fácil pero es importante que lo entiendas, por que en esto se basa todo lo que viene a continuación, si te estas preguntando por que es realmente importante, ahora vas a verlo.

Ahora vamos a hacer que podamos poner nosotros mismos la variable, es decir que la persona que usa el programa puede asignar un valor.para eso en vez de poner set debemos poner set/p

ej: set/p nombrevariable= valor

@echo off
echo.
set/p nombre= ¿Como te llamas?
cls
echo.
set/p años= ¿Cuantos años tienes?
cls
echo.
echo Hola %nombre% tienes %años% años.
echo.
echo Pulsa una tecla para salir.
pause>nul
exit

Una vez entendido esto vamos a empezar a utilizar las variables por ejemplo para hacer operaciones con ellas.
Para eso utilizaremos set/a. es como el set/p pero no se muestra en pantalla y realiza operaciones, porcentajes, sumas, restas etc.

Estos son los signos que podemos utilizar:

+ para sumar
– para restar
* para multiplicar
/ para dividir

Y lo vamos a expresar así:

@echo off
echo.
set/p numero1= Dime un numero
cls
echo.
set/p numero2= Dime otro para sumar al anterior
cls
set/a suma= %numero1% + %numero2%
echo.
echo %numero1% + %numero2% = %suma%
echo.
echo Pulsa una tecla para salir.
pause>nul
exit

PARTE 3

En esta parte del tutorial vamos a aprender a trabajar con if, if not, else y goto.

If sirve para expresar una condición. Es decir si pasa esto entonces haz esto. Para ello vamos a utilizar la siguiente estructura: if condición acción
ejemplo: if %variable%==4 echo bien!! esto quiere decir que si el valor de la variable es igual a cuatro entonces escribe «bien!!»

Las distintas condiciones que podemos comprobar con un if en batch son las siguientes: (operadores)

if variable==valor (para expresar si la variable es igual a valor haz esto)
if variable LSS valor (para expresar si la variable es menor a valor haz esto)
if variable GTR valor (para expresar si la variable es mayor a valor haz esto)
if variable LEQ valor (para expresar si la variable es menor o igual haz esto)
if variable GEQ valor (para expresar si la variable es mayor o igual haz esto)

if not se utiliza igual que if pero expresa todo lo contrario ej:
if not variable==valor (para expresar si la variable NO es igual a «valor»)  y lo mismo con el resto de condiciones vistas arriba.

@echo off
echo.
set/p variable= ¿Cuanto son 2 + 2?
cls
echo.
if %variable%==4 echo bien!!
echo.
pause
exit

Aquí también se podría utilizar el goto que sirve para enviar la lectura de comandos a otro sitio del bat por ejemplo if variable==valor goto correcto, después mas abajo pondríamos una «etiqueta» con ese nombre después de dos puntos ej: :correcto así quedaría: si variable es igual a valor entonces ir al menú «correcto» y en el ya escribiríamos lo que queramos con un ejemplo lo vas a entender mucho mejor.

@echo off
echo.
set/p variable= ¿Cuanto son 2 + 2?
cls
echo.
if %variable%==4 goto correcto
echo.
:correcto
echo bien!!
pause
exit

En este caso no tendría mucho sentido pero cuando tenemos más variables y muchas opciones a elegir es esencial útil ya lo iréis viendo

Este ejemplo indicaría que si la respuesta a la pregunta «¿cuanto son 2+2?» es 4 entonces escribe bien!!
pero ¿qué pasa si la respuesta no es esa? pues para eso sirve else, se utiliza así:
if variable==valor goto correcto else goto incorrecto esto significaría que si la respuesta es 4 entonces escribe bien pero si la respuesta es cualquier otra cosa escribe mal!!!

@echo off
:inicio
echo.
set/p pregunta= ¿cuanto son 2 + 2?
cls
echo.
if %pregunta%==4 goto correcto else goto incorrecto
:incorrecto
echo.
echo Mal!!
echo.
echo Vuelve a intentarlo
pause
cls
goto inicio
:correcto
echo.
echo Bien!!
echo Pulsa una tecla para salir de este ejemplo de www.todohacker.com
pause>nul
exit

He añadido lo de inicio por que así si es incorrecto vuelve a empezar.

Una vez que hemos llegado hasta aquí si lo habéis entendido podréis hacer cosas como esta:

@echo off
:inicio
echo.
set/p variable= ¿cuanto son 2 + 2?
cls
echo.
if %variable%==4 goto correcto else goto incorrecto
:incorrecto
echo.
echo Mal!!
echo Intentalo de nuevo
pause
cls
set/p variable1= ¿Cuanto son 5 - 3?
cls
if %variable1%==2 goto correcto else goto incorrecto1
:incorrecto1
echo.
echo Mal!!
echo Intentalo de nuevo
pause
cls
set/p variable2= ¿Cuanto son 4 * 4?
cls
echo.
if %variable2%==16 goto correcto else goto incorrecto2
:incorrecto2
echo.
echo mal!!
echo.
echo Intentalo de nuevo
pause
cls
goto inicio
:correcto
echo.
echo Bien!!
echo Presione una tecla para salir de este ejemplo de www.todohacker.com
pause>nul
exit

Te animo a que lo pruebes y te diviertas un rato modificandolo, échale imaginación, no hay limite a lo que puedas hacer 😉

PARTE 4

En esta parte vamos a ver algo muy sencillo, se trata del código de colores de las letras y el fondo de la consola simplemente se expresa con una combinación de números y letras de esta forma:

Primero ponemos color, para indicar que lo que le vamos a decir es el color del la letra y el fondo, y seguidamente debemos poner dos números sin espacio, el primero es el color del fondo y el segundo el color de letra.

Código de colores:

A = Verde claro
B = Aguamarina claro
C = Rojo claro
D = Púrpura claro
E = Amarillo claro
F = Blanco brillante
0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Púrpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro

 Sabiendo esto, si queremos que el fondo sea blanco y las letras negras ponderemos color 70 pruebalo tu mismo. Abajo hay unas fotos explicativas.
Ahora otra cosa muy sencilla.
No se si os habéis fijado en la barra de titulo de la terminal, pone por defecto la ubicación en la que nos encontramos, normalmente system32.

Pues esto se puede cambiar poniendo simplemente «title» y el nombre que le queramos poner.

Pondré un ejemplo conjunto para los códigos de color y titulo.

@echo off
title Prueba de color www.todohacker.com
color 70
echo.
echo Bienvenido a la prueba de color del cmd de todohacker.com
echo.
echo Pulsa una tecla para cambiaer al siguente color
pause>nul
color 4f
pause
exit

Prueba a cambiar los colores para entenderlo mejor.

Ahora vamos a ver redireccionamientos, son muy útiles ya lo verás.
Se utiliza > para escribir algo y >> para añadir algo a un documento que ya tenia algo escrito por ejemplo.
Se utilizan así: echo hola>archivo.txt esto escribiría hola en un archivo de texto situado en el directorio en el que nos encontramos, es decir por defecto en el que tenemos guardado el archivo de bat que ejecuta esta orden. Si el dicho archivo de texto con nombre «archivo» no existe lo crea.

@echo off
echo pulsa una tecla para crear el archivo
pause>nul
echo hola, esto es un ejemplo de todohacker.com > archivo.txt
echo archivo creado
pause
exit

Si os fijáis nos crearía un documento de texto en el escritorio (en caso de que el bat este en escritorio) con el nombre de «archivo», y escribiría dentro hola se pueden crear otro tipo de archivos, modificando la extensión, .txt, .bat etc.
Pero que pasaría si en el archivo queremos escribir mas lineas? en ese momento es cuando utilizamos el >>. si tenemos un documento de texto que pone hola y le decimos que escriba otra cosa así: echo que tal? > archivo.txt, lo remplazaría, es decir, pasaría a poner que tal? en la primera linea.
Pero si ponemos: echo que tal? >> archivo.txt se añadiría al hola una linea mas abajo. Pruébalo tu msimo, aquí pongo dos códigos de ejemplo para que veas la diferencia.

@echo off
echo hola > archivo.txt
echo.
echo Abre al archivo creado antes de continuar y mira lo que pone
echo Cierra el archivo y continua
echo.
pause
cls
echo que tal? > archivo.txt
echo.
echo Fijate en el archivo creado, pondra que tal? "hola" se ha borrado.
echo.
pause
exit
@echo off
echo hola > archivo.txt
echo.
echo Abre al archivo creado antes de continuar y mira lo que pone
echo Cierra el archivo y continua
echo.
pause
cls
echo que tal? >> archivo.txt
echo.
echo Fijate en el archivo creado, "pondra que tal?" despues de hola, no ha borrado nada.
echo.
pause
exit

Es posible que te hayas dado cuenta de algo, y es que esto es lo mismo que usamos para el pause>NUL. Efectivamente lo que estamos haciendo es redireccionar el texto por defecto a un archivo llamado «NUL», en teoría windows no debería crear este archivo, pero se que a veces lo crea, en todo caso no es un problema demasiado grave.

Espero que se haya entendido todo, la parte de las redirecciones es muy importante por que nos va a servir varias pruebas que hagamos posteriormente en creación de virus y scripts automáticos.

PARTE 5

En la anterior parte hemos aprendido a crear archivos, en esta vamos a aprender como ejecutarlos, borrarlos, copiarlos, cambiar sus atributos etc.

Empecemos por ejecutarlos.

Retomemos el ejemplo anterior en el que creamos un archivo de texto con dos lineas, bueno pues ahora vamos a ejecutarlo y a borrarlo.

@echo off
echo hola, esto es un ejemplo de todohacker.com > archivo.txt
echo.
echo abre al archivo creado antes de continuar y mira lo que pone
echo cierra el archivo y continua
echo.
pause
cls
echo que tal? >> archivo.txt
echo.
echo fijate en el archivo creado, "pondra que tal?" despues de hola, no ha borrado nada.
echo.
pause
exit

Para ejecutar un archivo utilizaremos el comando start y para borrarlo el comando del acordaos de especificar siempre la extensión.

@echo off
echo hola, esto es un ejemplo de todohacker.com > archivo.txt
pause
echo que tal? >> archivo.txt
echo.
echo El archivo se acreado
echo.
echo Ahora vamos a ejecutarlo (abrirlo)
pause
start archivo.txt
cls
echo.
echo bien puedes cerrar el archivo por que vamos a borrarlo
pause
del archivo.txt
cls
echo.
echo Archivo borrado con esto se puede borrar cualquier archivo, solo hay que saber el nombre 😀
pause
exit

Al comando del se pueden añadir distintas letras para que funcione de distinta forma:

del/f Modo force. Borra incluso los archivos de solo lectura
del/s Borra también los subdirectorios.
del/p Pide confirmación
del/q Modo silencioso. No pide confirmación en ningún caso

Se pueden utilizar varios en el mismo del
por ejemplo: del/f/p archivo.txt
borraría el archivo aunque fuese de solo lectura y pediría confirmación

Por supuesto para el comando del también se puede especificar la ruta del archivo si este no estuviera en el mismo directorio
ej: del c:/ruta/correspondiente/archivo.txt

Ahora vamos con el comando cd que utilizaremos para cambiar el directorio general de la terminal, es decir, si el archivo bat esta en el escritorio la terminal estará en ese directorio por defecto y para cambiarlo utilizaremos el mencionado cd.

Por ejemplo si queremos crear el archivo txt del ejemplo en mis documentos en vez de en el escritorio podriamos escribir la ruta cada vez que nos refiramos al archivo pero es mas sencillo si cambiamos el directorio actual de la terminal para que siempre se dirija allí.

Para ello escribiremos: cd C:\Documents and Settings\Propietario\Mis documentos (los nombres de los directorios pueden cambiar según el ordenador)
y todo lo que creemos o eliminemos sin especificar la carpeta lo hará en mis documentos

También podemos escribir:
cd..(con los puntos) e irá al directorio superior es decir, si estamos en mis documentos se trasladará a propietario, en el caso del ejemplo
cd \\ y se trasladara a la raíz del directorio. en este caso C:

Llegados a este punto tienes los conocimientos necesarios para continuar aprendiendo por tu cuenta a partir de experimentación y experiencia, voy a nombrar algunos comandos más:
rd borra un directorio de raíz solo tenemos que especificar la ruta del directorio y borra todo lo que tenga dentro, carpetas, mas archivos, etc.

format formatea una unidad por ejemplo format k: formatearía un pendrive externo o le que tengamos en esa unidad, o format c: (ya podéis imaginaros lo que hace)

taskkill termina un proceso como por ejemplo el skype muy útil para bromas ej: taskkill Skype.exe cerraría el skype. Puedes ver los procesos que tienes activos pulsando ctrl+shift+esc. (shift es la tecla que esta sobre el ctrl de mayusculas.)

shutdown también es muy útil para bromas y según lo que lleve detrás significa una cosa u otra:

-p Apaga el equipo local sin tiempo de espera ni advertencia.
-h Hiberna el equipo local.
-l Cierra la sesion.
-g Cierra la sesion y reinicia el equipo
-s Apaga el equipo.
-r Reinicia el equipo.
-e Documenta la razón del cierre inesperado de un equipo.
-m \\equipo Especifica el equipo de destino. (explicado mas abajo)
-t xxx Establece el período de tiempo de espera antes del cierre en xxx segundos.
-c «comentario» Comentario acerca de la razón del reinicio o apagado.
-f Fuerza el cierre de las aplicaciones sin advertir previamente a los usuarios.
-a Cancela el apagado.
(nota: Estas opciones solo están disponibles a partir de windows 7, en versiones anteriores solo tenemos -s, -r, -t, -a, -c)

Esto es básicamente lo que utilizo en el titorial de crear un minivirus pero de forma mas sencilla

un ejemplo
shutdown -s -t 60 (tiempo en segundos) -c virus intrusion
Cuando se ejecute pondrá una cuenta atrás de 1 min, pondrá el mensaje de: «virus intrusion» y se apagará
para cancelar la cuenta atrás debemos poner shutdown -a, se puede poner directamente en inicio, ejecutar (simbolo de windows + R) y se cancelara automáticamente.

msg * es otro comando muy útil para bromas hace que salga un mensaje de windows con el texto que le pongan

Por ejemplo: msg * atención su sistema contiene software ilegal estamos enviando la información al FBI

Ahora aprenderemos a utilizar el comando copy que como su nombre indica sirve para copiar archivos.
Se utiliza de este modo copy ruta del archivo que queremos copiar «ruta del directorio donde lo queremos copiar incluyendo el nuevo nombre del archivo.

Ejemplo: si queremos copiar un archivo que se llama cosa.txt de el directorio del escritorio a mis documentos, pondremos: copy C:\Documents and Settings\Propietario\Escritorio\cosa.txt «C:\Documents and Settings\Propietario\Mis documentos\cosa2.txt

y por último para cambiar los atributos de un archivo utilizaremos attrib

arttrib+ nombre del archivo o ruta, mostraría los atributos del archivo.

Los atributos son solo lectura, oculto, sistema
Para cambiarlos utilizaremos:

r => Lectura. Solo lectura con +r, normal con -r
h => oculto. Se activa con +h y desactiva con -h
s => Sistema. Se activa con +s y desactiva con -s

ej:attrib +h se pondría oculto como atributo

Aquí concluye este tutorial, estos son los comandos mas básicos que me ha parecido importante mencionar, hay que decir que he obviado cosas que podrían considerarse importantes, como por ejemplo los bucles, pero este tutorial tenia la misión de ser una introducción, y no me ha parecido conveniente extenderlo mas, ahora es tu misión continuar aprendiendo, lo más importante ya lo sabes y ahora el limite es tu imaginación.

Solo me queda para concluir mencionar un modo de nombrar a los archivos en general
para ello utilizaremos el * que nombra a cualquier archivo es decir si decimos:

del archivo.* borraria todos los archivos que se llamen «archivo» sean de la extensión que sean
del *.txt borraría todos los archivos de texto se llamen como se llamen
del a*.txt borraría todos los documentos de texto que empiecen por a
del nombre.d* borraría todos los archivos que se llamen «nombre» y que su extensión empiece por d como doc o dat

También podemos utilizar ? se usa igual que * pero sustituye a una única letra
ej: del pan?l.txt boraria todos los archivos de texto que empezasen por pan siguiese una letra cualquiera y terminase en l por ejemplo panel, panal etc.

Espero que hayan entendido todo. Cualquier duda que tengan por favor pongan un comentario y se responderá con mucho gusto.
Si quieres puedes poner en una ventana de terminal help y saldrán todos los comandos, por supuesto TODOS los comandos mencionados aquí se puede escribir directamente en la ventana de terminal sin necesidad de crear un archivo bat.

Este tutorial tiene copyleft de TodoHacker.com si lo usas, pon las fuentes.

Creative Commons License


Todohacker by 4m1g0 is licensed under a Creative Commons.

Escribe un comentario

Comentario

440 Comentarios

  1. Felicidades por el tutoríal.
    ¿Como se usa el comando msg? he probado msg * lo que sea *; msg ( lo que sea );msg ¨lo que sea ¨.
    Para que cuando se ejecute una variable salga un ventana de mensaje . Pero no me aparece nada.
    Practicare tus ejemplos.
    Muchas gracias.

  2. Me a servido de mucho tu tutorial, si pudieras ayudarme un poco necesito crear un bat que al ejecutarlo pulse la tecla F4 en el teclado automaticamente una sola vez.
    Gracias de antemano.

  3. ¿puedo hacer que el programa ejecute una imagen?, ya lo intente con el comando
    start nombredelaimagen.jpg o .png o inclusive ya intente exportar la imagen con extencon .txt
    pero siempre me manda el aviso de que no se a encontrado el archivo, y no es problema el que no encuentre la imagen porque tengo el programa y la imagen en la misma carpeta.

    • Widnows utiliza la extensión del archivo para determinar con que programa debe abrirlo. De esta forma, si ejecutas start imagen.jpg por ejemplo, el sistema debería buscar un programa instalado que pueda abrir jpg y utilizarlo.

      Si esto no te está funcionando, siempre puede forzar a usar un programa concreto, pero tienes que saber de antemano que este programa está instalado en el ordenador donde ejecutas el código.

      Por ejemplo: firefox.exe imagen.jpg

      ¿Que sistema operativo estás usando en concreto?
      Saludos

      • hola, estoy creando un programa , cree una contraseña con goto
        ej.
        set/p clave= introduca contraseña
        if %clave%=patata goto admin else goto user

        pero me da errores de goto , lo unico que quiero que haga despues es que abra dos carpetas distintas
        ¿me ayudas?

        • Hola,

          El error está en que el símbolo = es para asignar valores, para comparar igualdad hay que usarlo doble: ==

          Ej:

          set/p clave= introduca contraseña
          if %clave% == patata goto admin else goto user
          :user
          echo user
          pause
          exit
          :admin
          echo admin
          pause
          exit
          

          Saludos

          • Hola, tenía una duda, quando escribe «contraseña», la «ñ» se escibe de otra manera, como puedo saber escrivir totods los caráctoeres especiales, digamos, de es manera para que se lean bien?
            Gracias

          • Tildes y caracteres especiales en bats:

            ¡ = í
            ¢ = ó
            £ = ú
            ¤ = ñ
            ¥ = Ñ
            § = º
            ¨ = ¿
            © = ®
            ª = ¬
            « = ½
            ¬ = ¼
            ® = «
            ¯ = »
            ° = ░
            ± = ▒
            ² = ▓
            ³ = │
            ´ = ┤
            µ = Á
            ¶ =
            · = À
            ¸ = ©
            ¹ = ╣
            º = ║
            » = ╗
            ¼ = ╝
            ½ = ¢
            ¾ = ¥
            ¿ = ┐
            À = └
            Á = ┴
            = ┬
            Ã = ├
            Ä = ─
            Å = ┼
            Æ = ã
            Ç = Ã
            È = ╚
            É = ╔
            Ê = ╩
            Ë = ╦
            Ì = ╠
            Í = ═
            Î = ╬
            Ï = ¤
            Ð = ð
            Ñ = Ð
            Ò = Ê
            Ó = Ë
            Ô = È
            Õ = ı
            Ö = Í
            × = Î
            Ø = Ï
            Ù = ┘
            Ú = ┌
            Û = █
            Ü = ▄
            Ý = ¦
            Þ = Ì
            ß = ▀
            à = Ó
            á = ß
            â = Ô
            ã = Ò
            ä = õ
            å = Õ
            æ = µ
            ç = þ
            è = Þ
            é = Ú
            ê = Û
            ë = Ù
            ì = ý
            í = Ý
            î = ¯
            ï = ´
            ñ = ±
            ò = ‗
            ó = ¾
            ô = ¶
            õ = §
            ÷ = ÷
            ø = ¸
            ù = °
            ú = ¨
            û = ·
            ü = ¹
            ý = ³
            þ = ²
            ÿ = ■
            Œ = î
            œ = £
            Š = è
            š = Ü
            Ÿ = ƒ
            Ž = Ä
            ž = ×
            ƒ = â
            ˆ = ê
            ¯ = »
            ° = ░
            ˜ = ÿ
            ß = ▀
            µ = Á
            – = û
            — = ù
            ‘ = æ
            ’ = Æ
            ‚ = é
            “ = ô
            ” = ö
            „ = ä
            † = å
            ‡ = ç
            • = ò
            … = à
            ‰ = ë
            ‹ = ï
            › = ø
            £ = ú
            € = Ç
            ™ = Ö
            · = À
            ˜ = ÿ
            ¦ = ª
            ¬ = ¼
            ¯ = »
            ¤ = ñ

    • Eso es sencillo, debes estar en un directorio distinto… aunque tu programa esté en el mismo directorio que la imagen, éste se abre en un directorio distinto por defecto.

      Ej: C:\Users\UsuarioXcualquiera …

      Por lo que debes arreglar tu programa para que antes de abrir la imagen.jpg se ubique en el directorio en el que tu imagen se encuentra.
      Esto lo logras con un comando parecido a este:

      CD C:\Users\PepeRobertico\Desktop\CarpetaConMiImagen (colocas la carpeta donde está tu imagen)

      y luego: START imagen.jpg

      cabe recalcar que si tu imagen posee un nombre que contenga espacios entonces debes colocarle comillas:

      START «nombre con espacios.jpg»

      Espero haberte ayudado, un saludo!

  4. Buenas! tio me ha servido de mucho esto. Estoy recien aprendiendo del tema pero hay un par de cosas que no logro que me resulten. No se si podrás ayudarme.

    Creo un archivo de texto en la unidad «C:\Prueba.txt» este contiene un texto de 5 líneas en el cual encontramos la palabra «Queso». Ahora debo crear un batch el cual busque la palabra «Queso» con el comando find u otro compatible dentro de «C:\Prueba.txt» y de encontrarlo pues cerrar cmd (con exit) pero de no encontrarlo apagar el ordenador (shutdown /s). Alguna sugerencia? Gracias!!

    • hola,

      Para ejecutar un .exe simplemente tienes que escribir su nombre, estando en la misma carpeta, o escribiendo la ruta completa.

      Por ejemplo si tienes un ejecutable llamado «programa.exe» en el escritorio, simplemente tienes tienes que navegar hasta el escritorio (Con el comando cd) y ejecutar «programa» o «start programa»

      Saludos!

  5. Hola!Muchas gracias , realmente me a servido!Muy bien explicado también!
    Pero tengo una sola pregunta:
    En «if variable==» hay alguna manera de agregar más de una respuesta correcta por decirle?
    No se si me explico muy bien!Pero de vuelta te agradezco.

    P.D:Llegué un año tarde 😀

    • Hola!

      ¿Por que un año tarde? jeje

      Lo ideal en cualquier lenguaje de programacion sería utilizar operadores lógicos, como OR y AND, asi podriamos decir: if x OR y… el problema es que en batch NO EXISTEN.

      Sin embargo podemos hacer lo que dices utilizando diferentes if en el orden correcto, por ejemplo:

      if %variable%==4 goto correcto
      if %variable%==5 goto correcto
      if %variable%==8 goto correcto
      goto incorrecto
      :correcto
      echo Bien!
      :incorrecto
      echo Mal!

      De esta forma las respuestas 4, 5 y 8 serían correctas y todas las demás incorrectas. Espero que se entienda. Cualquier cosa me dices 😉

      Saludos!

  6. Hola amigos

    tengo unas replicaciones con oracle goldengate y necesito crear un .bat que abra el proceso de goldengate y ejecute un INFO ALL, pero solo logro hacer que el bat ejecute el proceso correspondiente pero no que tire el comando INFO ALL? como podria lograrlo y ademas guardar el resultado en un .txt?

  7. Hola, estoy intentando usar el comando Exist para una carpeta que contiene espacios, ademas el nombre del fichero tambien tiene espacios y em esta devolviendo un error comopodria solucionar esto? gracias

    • Hola,

      Perdona la tardanza en contestar.

      Para hacer referencia a una ruta o nombre de archivo/carpeta que contiene espacios, basta con ponerlo entre comillas.

      if exist «nombre con espacios.txt» …

      Saludos

  8. como puedo realizar un archivo .bat para ejecutar dos redes en mi PC esto debido ha que hay programas que solo abren con la area local «LAN» y si estoy conectado a un Cable modem «CM» tambien en la misma PC con otra tarjeta de red no puedo abrir estos programas en especifico me dan error.

  9. Hola 4m1g0: En mi opinión, tu aporte es importante, sólo que he notado una pregunta no atendida, aquella sobre pulsar la tecla F4 mediante batch.
    Entonces, ¿cómo enviar pulsaciones de teclas especiales mediante .bat?

  10. la verdad es que con el lenguaje bach no puedo poner el exponente no se me questa mucho de entender, como puedo hacer para poner exponente

    • Hola hack21,

      Había un error en el tutorial que ya fue corregido, como ya te habrás dado cuenta, en batch no es tan fácil elevar un numero a una potencia. Pues no existe un operador para hacerlo.

      Para conseguirlo tenemos que hacer un bucle y multiplicar por el mismo número las veces que sea necesario. Aquí tienes un ejemplo:

      set result=1
      set i=1
      :multiply
      set /a result=result*x
      set /a i=i+1
      if %i% lss %n% goto multiply
      echo %result%

      Saludos

  11. Gracias por tu respuesta pero siento decirte que no me reconece multiply como un comando interno o externo, programa o archivo por lotes ejecutable. No se pruevalo lo he echo así
    @echo off
    color 0a
    :principio
    set /p num1="Introduce el PRIMER numero: "
    set /p num2="Introduce el SEGUNDO numero: "
    echo ESCRIBE EL NUMERO UNO PARA EXPONENTE
    set /p op="¿Quieres poner exponente?
    set result=1
    set i=1
    :multiply
    set /a result=result*x
    set /a i=i+1
    if %i% lss %n% goto multiply
    echo %result%
    set /p caso="Quieres seguir el programa de calculadora, escribe si o no:"
    if %caso% == si (goto :principio)
    if %caso% == no (goto :salir)
    :salir
    exit
    pause
    goto:eof

    saludos

    • Perdona, es que no copié todo el script, falta definir la variable n y por eso da error.

      Este lo puedes ejecutar tal cual:
      set result=1
      set n=5
      set x=2
      set i=1
      :multiply
      set /a result=result*x
      set /a i=i+1
      if %i% lss %n% goto multiply
      echo %result%
      pause

      Hace 2 ^ 4 y por lo tanto debería dar 16.

      Pruebalo y me dices.
      Saludos

  12. Gracias, lo que tu me dices està bien, pero solo da 16, osea le pones 18^5=16
    entonces que tengo que hacer dar mas valores a x?
    siento agobiarte pero esto me esta gustando mucho!!
    @echo off
    color 0a
    :principio
    set /p num1="Introduce el PRIMER numero: "
    set /p num2="Introduce el SEGUNDO numero: "
    echo ESCRIBE EL NUMERO UNO PARA EXPONENTE
    set /p op=”¿Quieres poner exponente?
    set result=1
    set n=5
    set x=2
    set i=1
    :multiply
    set /a result=result*x
    set /a i=i+1
    if %i% lss %n% goto multiply
    echo %result%
    pause

  13. Introduce el PRIMER numero: 2
    Introduce el SEGUNDO numero: 2
    ESCRIBE EL NUMERO UNO PARA EXPONENTE
    Quieres poner exponente?1
    16
    Presione una tecla para continuar . . .
    esto es lo que me da siempre

    • Hola otra vez.

      Me alegro mucho de que te haya enganchado esto de la programación, yo llevo más de 15 años enganchado y ahora me dedico profesionalmente a ello.

      Vamos a verlo con cuidado, fíjate en la parte que hace la multiplicación:
      set /a result=result*x

      result empieza valiendo 1 y lo multiplicamos por x que lo hemos asignado a 2, mas arriba. Una vez hecho esto, result pasa a valer 2*1=2 luego incrementamos el valor de i: set /a i=i+1 y comprobamos si «i» es menor que «n». «n» vale 5 (set n=5) por lo volvemos a la etiqueta :multiply. Vamos a repetir esto 4 veces (i=1, i=2, i=3, i=4). ¿Hasta aquí bien?

      El problema es que tu asignas arriba num1 y num2, pero no los usas en la operación. En lugar de estas variables, puedes pedir que el usuario inserte x y n directamente.

      Quedaría algo así (he puesto que i empiece en 0):

      @echo off
      color 0a
      set /p x=”Introduce la BASE: ”
      set /p n=”Introduce el EXPONENTE: ”
      set result=1
      set i=0
      :multiply
      set /a result=result*x
      set /a i=i+1
      if %i% lss %n% goto multiply
      echo %x% elevado a %n% es: %result%
      pause

  14. muchas gracias
    si tengo otra duda te lo preguntare 4m1g0
    si te suena raro que te pregunte tanto es porque tengo 10 años y me cuesta un poco

    • Perfecto!

      Puedes preguntar todo lo que quieras, es normal que cueste un poco al principio, tengas la edad que tengas. Pero vas por muy buen camino 😉

      Tenemos también un foro aquí: https://todohacker.com/forum/preguntas/
      Si tienes otras dudas no relacionadas con este tutorial o quieres comentar alguna cosa en concreto puedes ser el primero en escribir.

      También si te apetece compartir lo que vas haciendo puedes hacerlo ahí, que seguro le es de utilidad a mucha gente.

      Un saludo y ánimo con eso!

  15. Ultimamente he estado mirando y he visto que en batch se pueden hacer cosas pero no muchas, por lo tanto queria preguntar, ¿que otro lenguaje de programacion seria mas util, para hacer programas mas elavorados?
    Por ejemplo el php, o ya tienes que tener una base un poco amplia de programacion…
    alguin me aconseja?
    saludos 🙂

  16. mi amigo 4m1g0, mira lo que he logrado yo solo excepto la raíz cuadrada:

    @echo off
    color 0a
    title Calculadora científica hack 21
    :principio
    set /p num1="Introduce el PRIMER numero: "
    set /p num2="Introduce el SEGUNDO numero: "
    echo Escribe el numero 1 para sumar
    echo Escribe el numero 2 para restar
    echo Escribe el numero 3 para multiplicar
    echo Escribe el numero 4 para dividir
    echo Escribe el numero 5 para exponent
    echo Escribe el numero 6 para raíz cuadrada
    set /p op="¿Quieres sumar, restar, multiplicar,dividir,exponent o raíz cuadrada?"
    
    if %op% == 1 (goto :sumar)
    if %op% == 2 (goto :restar)
    if %op% == 3 (goto :multiplicar)
    if %op% == 4 (goto :dividir)
    if %op% == 5 (goto :exponent)
    if %op% == 6 (goto :raíz cuadrada)
    
    :sumar
    set /a suma="%num1% + %num2%"
    echo El resultado de la suma es: %suma%
    set /p caso="Quieres seguir el programa de calculadora, escribe si o no:"
    if %caso% == si (goto :principio)
    if %caso% == no (goto :salir)
    :salir
    exit
    pause
    goto:eof
    
    :restar
    set /a resta="%num1% - %num2%"
    echo El resultado de la resta es: %resta%
    set /p caso="Quieres seguir el programa de calculadora, escribe si o no:"
    if %caso% == si (goto :principio)
    if %caso% == no (goto :salir)
    :salir
    exit
    pause
    goto:eof
    
    :multiplicar
    set /a multiplica="%num1% * %num2%"
    echo El resultado de la multiplicacion es: %multiplica%
    set /p caso="Quieres seguir el programa de calculadora, escribe si o no:"
    if %caso% == si (goto :principio)
    if %caso% == no (goto :salir)
    :salir
    exit
    pause
    goto:eof
    
    :dividir
    set /a divide="%num1% / %num2%"
    echo El resultado de la division
    echo es: %divide%
    set /p caso="Quieres seguir el programa de calculadora, escribe si o no:"
    if %caso% == si (goto :principio)
    if %caso% == no (goto :salir)
    :salir
    exit
    pause
    
    
    :exponent
    
    cls
    
    echo            ================ exponent ====================
    
    color 0a
    set /p x="Introduce la BASE: "
    set /p n="Introduce el EXPONENTE: "
    set result=1
    set i=0
    :multiply
    set /a result=result*x
    set /a i=i+1
    if %i% lss %n% goto multiply
    echo %x% elevado a %n% es: %result%
    set /p caso="Quieres seguir el programa de calculadora, escribe si o no:"
    if %caso% == si (goto :principio)
    if %caso% == no (goto :salir)
    :salir
    exit
    pause
    
    :raíz cuadrada
    
    cls
    
    echo              ================raíc cuadrada=================
    
    :init
    cls
    set /p i=Numero para calcular la raíz:
    if %i% GTR 999999999999999999999999999999999999999999 (goto letra)
    if not defined i (goto init)
    goto calcular
    
    :letra
    cls
    echo Pusiste una letra
    pause
    goto init
    
    
    
    :calcular
    cls
    call:potencias
    echo La raiz de %i% es igual a %raiz%.
    if %exact%==false (
    echo Resto: %resto%
    )
    pause > nul
    goto init
    
    
    
    :potencias
    set j=0
    set y=0
    set x=0
    :_bp
    set /a j=j+1
    set /a y=j*j
    if %y% LSS %i% (goto _pr)
    if %y% GTR %i% (goto _a)
    if %y%==%i% (goto _exact)
    
    :_pr
    set x=%y%
    set x2=%j%
    goto _bp
    
    :_a
    set raiz=%x2%
    set exact=false
    set /a resto1=%x2%*%x2%
    set /a resto=i-resto1
    goto:eof
    
    :_exact
    set raiz=%j%
    set exact=true
    goto:eof
    • Hola,

      ¡¡Impresionante!! Has avanzado un montón, me ha gustado mucho y te lo he puesto con formato resaltado, por que creo que además le va a ser muy útil como ejemplo a otra gente que también este haciendo sus programas en batch. Enhorabuena por el trabajo y gracias por compartirlo!

      Con respecto a la otra pregunta, batch es un lenguaje que se usa bastante a día de hoy para administrar sistemas, por que permite automatizar tareas como copiar archivos, renombrar ficheros en bloque, etc. de forma más rápida.

      Pero si quieres avanzar más (y parece que si) haces muy bien en plantearte otros lenguajes. En general no vas a necesitar nada más que constancia y paciencia para aprender cualquier lenguaje, ya eres autodidacta y eso te permite llegas hasta donde tu quieras.

      Con respecto a los lenguajes, depende de lo que quieras hacer. Con tecnologías web (php, html, css, javascript) vas a poder hacer cosas muy chulas pronto, sin duda es un buen comienzo. Y si quieres algo de «escritorio», Python es un lenguaje muy potente hoy en día, y no es muy complicado de aprender.

      Te voy a hacer algunas preguntas, para poder aconsejarte mejor:
      ¿Tienes alguna preferencia con respecto a lo que quieres hacer?
      ¿Tienes idea de como funciona una página web por dentro?
      ¿Te suena el sistema operativo Linux?

      Un saludo!

  17. Lo que quiero hacer es programar apps hacer paginas web y si llego que no creo para programar juegos como Call Of duty ya que soy un fanático y me vicio
    La verdad es que no se como f funciona una pagina web pero me gustaría aprender. El saber no ocupa lugar.
    El sistema linux me suena ya que con el se pueden adaptar todas las apps a tu gusto programando. De hecho mi padre me ha comprado una rasbery pi o algo así que lleva un sistema operativo linux.
    La rasbery pi es un pequeño ordenador que tiene todos los juegos retro, una pasada , también lleva esto del linux y por ultimo como un sitio para ver pelvis por estriming
    Si tienes otras preguntas me preguntas igual que yo a ti
    Saludos un fuerte abrazo

    • La buena noticia es que si vas a poder programar juegos como Call of duty, pero para llegar a eso hace falta mucho tiempo y esfuerzo, por lo que no te desanimes si ves que vas muy poco a poco, es normal. Además un juego tan grande se hace entre bastantes personas y se tarda años en terminar, pero vas a poder hacer juegos más pequeños y en el futuro si te gusta podrás trabajar con un equipo de gente donde hagas juegos como ese.

      Con respecto a Linux, te lo preguntaba, por que como bien has dicho, es un sistema operativo (igual que windows) pero libre, es decir, todo el código de programación que lo constituye está disponible para leerlo y estudiarlo, además todos podemos contribuir a su mejora y modificarlo como queramos. Por eso considero que es un «lugar» estupendo para aprender. Si tienes la oportunidad de instalarlo y jugar un poco con el te lo recomiendo.

      Rasberry PI es un ordenador con la misma filosofía, toda su estructura hardware es libre (puedes verla aquí). Y usa linux, por lo tanto puedes usarla para programar en ella con python por ejemplo (es más fácil hacerlo que en windows), pero los programas que hagas podrás hacerlos funcionar en windows también.

      Dicho todo esto, creo que lo mejor es que empieces por el mundo web, si te apetece hacer una página web puedes aprender bastante rápido y eso te va a ayudar a familiarizarte con algunos conceptos antes de seguir. Voy a buscar algún enlace donde puedas leer sobre esto y te lo paso, en cualquier caso, si quieres ir investigando por tu cuenta, puedes ir empezando y me cuentas que te parece y si lo ves interesante.

      Saludos

  18. muy interesante gracias
    Por lo que he visto es como una pàgina que te enseña todo sobre lo que quieres programar
    Me a gustado mucho
    Estas dos setmanas que quedan, seguramente no podre hacer nada ya que estoy en setmana de examenes.
    un fuerte abraço
    hasta la vista:)

  19. A y por cierto el ultimo dia estube mirando de como hacer el efecto matrix en batch, pero lo que dicen en los videos , no es matrix
    podrias ayudarme o no sabes comoo se hace ?
    O se puede hacer con batch? O se tiene que escribir con otro lenguage?
    espero tu respuesta
    saludos
    XD

    • Perdona, no había visto tu mensaje.

      No se exactamente cual es el efecto matrix, con la consola de windows (cmd) ya sabes como poner las letras en el color que quieras, luego lo que puedes hacer es imprimir con echo, pero no puedes cambiar lo que ya está escrito arriba (hasta donde yo se).

      Con una librería gráfica (y otro lenguaje) podrías dibujar lo que quieras como quieras en la pantalla, pero es mucho trabajo para conseguir solo eso. Te recomiendo dejarlo par más adelante. 🙂

  20. Hola, me ha gustado mucho tu post. Entiendes algo de parámetros? Se que no hablas de ello en el tutorial pero igual podrías ayudarme.

    El caso es que tengo que hacer un bat donde si el tercer parametro vale copiar o mover que copie el parametro 1 al directorio del parametro 2, y si el tercer parametro no vale ninguna de esas dos opciones tiene que dar mensaje de error. También debe dar un error si el archivo o el directorio no existen. No lo entiendo.
    Tal como lo tengo actualmente me sale así al ejecutarlo.

    1 archivo(s) copiado(s)
    La sintaxis del comando no es correcta.
    La sintaxis no es correcta

    @echo off

    if #%3# == ## goto error

    if not exist %1 goto error

    if not exist %2\nul goto error

    if #%3# == #copiar# goto copiar

    if #%3# == #mover# goto mover

    :copiar

    xcopy %1 %2 /r /s

    :mover

    move %1 %2 /r /s

    :error

    echo La sintaxis no es correcta

    :fin

    • Hola,

      El primer problema es que después de hacer la operación correspondiente, no saltas a :fin. Por lo tanto el programa sigue ejecutando la siguiente linea, en lugar de terminar. Esto se solucionaría poniendo «goto fin» despues del comando xcopy y del comando move.

      En segundo lugar. En el caso del comando move, no son necesarios los parámetros /r y /s (no existen).

      Espero que te sea útil. Cuéntame si lo consigues 😉

      • Muchas gracias ahora entiendo porque me iba siempre a error aunque copiara, era porque faltaba enviarlo a fin después de hacer la operación, y lo de /r y /s no se porque lo puse, lo quite y ahora ya funciona todo bien.

        Otro problema que tengo con otro bat, debe recibir 3 parametros, si recibe más o menos dara error. Si el numero de parametros es correcto debe validar que se cumplen las siguientes condiciones

        • El valor del primer parámetro es /a
        • El valor del segundo parámetro es /b
        • El valor del tercer parámetro es ABC

        Si no se cumple ninguna condición muestra mensaje de error y finaliza.
        No se que estoy haciendo mal.

        @echo off

        :Inicio
        set a= /a /b ABC

        if #%4# == ## (
        shift

        echo El valor del primer parametro es %1
        echo El valor del segundo parametro es %2
        echo El valor del tercer parametro es %3

        goto fin

        )

        if not #%3# == ## (

        echo Error

        )

        :fin

        • Hola,

          ¿Por que utilizas el comando shift? Este comando lo que hace es desplazar los parametros una posición, con el objetivo de poder recorrer todos los parámetros en un bucle. Pero en tu caso no se exactamente que es lo que querías hacer.

          La forma fácil, es ir uno por uno comprobando los 3 primeros parámetros con 3 «if» de esta forma:

          if not #%1# == #/a# goto error
          if not #%2# == #/b# goto error
          […]

          De la misma forma puedes comprobar que no exista el parámetro 4 con otro if más.

          Espero que esto te ayude a continuar. Cuéntame que tal y si no te sale lo vamos viendo juntos.

          Por curiosidad, ¿quien te pide este tipo de problemas? Me parecen muy interesantes.

          Saludos

          • Vale, le puse 4 if not para que me de error en caso de invocar más o menos de 3 parámetros, porque si le pongo solo 3 if not, cuando invoco con más o menos de los necesarios no me da error.
            Estoy estudiando Desarrollo de apps multiplataforma y en el módulo de sistemas estamos dando batch y empezamos también con scripts en ubuntu.
            La verdad que me está costando mucho y eso que no es tan difícil.

  21. Hay que ir poco a poco, no se puede asimilar en un día, pero en cuanto lo vayas entendiendo se te volverá cada vez más fácil.

    Si tienes dudas con los de bash en Ubuntu también puedes preguntar 😉

    Ánimo!

  22. Hola, soy nuevo en esto… tengo la necesidad de crear un bat que renombre un archivo csv con la fecha del día en que se ejecuta. tengo una tarea programada en un servidor que me genera un informe diario pero si no lo renombro todos los días este se sobrescribe. se me esta convirtiendo en un verdadero problema.

    he intentado con varios bat que he visto en internet pero no he logrado conseguir que se renombreel csv.

    quedo atento

    • Hola Alejandro,

      Para obtener la fecha en batch puedes usar la variable %date% el problema es que dependiendo del idioma el formato varía.

      En mi caso si hago: echo %date% me devuelve: Wed 03/15/2017

      Si en tu equipo el formato tambien es ese puedes obtener cada parte así:
      Día: %date:~7,2%
      Mes: %date:~4,2%
      Año: %date:~-4%

      Entonces podrías renombrar el archivo así: move archivo.txt %date:~-4%-%date:~4,2%-%date:~7,2%.txt

      Espero que se entienda, si en tu caso el formato de fecha es distinto, hay que recortarlo de otra forma. Si no lo consigues pon aquí el resultado de hacer echo %date% y lo vemos.

      Saludos

  23. De momento con bash no tengo problemas pero se me va a complicar, lo estoy viendo.
    Necesito que me ayudes con otro bat, sobre una agenda, tengo todo hecho pero me falta un bat que modifique registros de la agenda. Para modificar primero le doy el DNI y luego me sale un menu con 3 opciones a elegir entre modificar nombre que sería la opción 1, apellido opción 2 y telefono opción 3. Más alla de eso no se como seguir. Cada uno de esas opciones las mando al for, que es lo que no me sale

    :nombre
    set /p modificar= Escriba el nombre a modificar:
    set /p mod= Escriba el nuevo nombre:
    goto modif

    :apellido
    set /p modificar= Escriba el apellido a modificar:
    set /p mod= Escriba el nuevo apellido:
    goto modif

    :telefono
    set /p modificar= Escriba el telefono a modificar:
    set /p mod= Escriba el nuevo telefono:
    goto modif

    :modif
    for /f «tokens=1-4 delims=:» %%i in (Agenda.txt) do (
    set «linea=%%i»
    set linea=!linea:%modificar%:%mod%!
    If %%i == %DNI3% (echo DNI: %%i Nombre: %%j Apellidos: %%k telefono: %%l)
    Echo %linea% >> Nueva_Agenda.txt
    )
    Del /Q «Agenda.txt»
    Rename «Nueva_Agenda.txt» «Agenda.txt»

    • Hola Rubens,

      La verdad es que la cosa se está poniendo complicada…

      No entiendo que haces en esta linea: set linea=!linea:%modificar%:%mod%!
      Que significan las exclamaciones? es parte de la sintaxis del archivo agenda.txt?

      Por otro lado, entiendo que al principio del programa preguntas que quiere modificar: nombre, apellido o telefono.

      Dentro del bucle las variables i, j, k, l que contienen el nombre, apellidos y telefono respectivamente, yo comprobaría que quiere modificar y en función de eso compararía si dicho campo coincide con la variable «modificar» y si es asi lo sustituyo por «mod»:

      Suponiendo que la respuesta a la pregunta ¿que quieres modificar «nombre», «apellido» o «telefono» se almacena en la variable %campo% haría lo siguiente:

      for /f “tokens=1-4 delims=:” %%i in (Agenda.txt) do (
        set “linea=%%i:%%j:%%k:%%l”
        If %%i == %DNI3% (echo DNI: %%i Nombre: %%j Apellidos: %%k telefono: %%l)
        If %campo% == nombre (
          IF %%j == %modificar% ( set linea=%%i:%mod%:%%k:%%l )
        )
        If %campo% == apellido (
          IF %%k == %modificar% ( set linea=%%i:%%j:%mod%:%%l )
        )
        If %campo% == telefono (
          IF %%l == %modificar% ( set linea=%%i:%%j:%%k:%mod% )
        )
        Echo %linea% >> Nueva_Agenda.txt
      )
      

      Espero que se entienda la idea, cualquier cosa me dices.

      Saludos

      • Me autocorrijo…

        Las exclamaciones sirven para realizar expansión de variables retardada… realmente no lo conocía, pero paso a explicarlo brevemente. En batch cuando haces un bucle, antes de ejecutar nada se sustituyen las variables por sus respectivos valores, por lo tanto si dentro del bucle hacemos un SET. este no va a afectar puesto que las variables ya están sustituidas (este proceso de sustitución se llama «variable expansion» o expansión de variables)

        Para usar la expansion de variables retardada y evitar este problema hay que poner las variables entre signos de admiración (!) y no porcentajes (%). Además al principio del programa hay que activar esta funcionalidad con el comando: SETLOCAL ENABLEDELAYEDEXPANSION

        Por lo tanto para que el código del comentario anterior funcione habria que ponerlo de la siguiente forma:

        for /f “tokens=1-4 delims=:” %%i in (Agenda.txt) do (
          set linea=%%i:%%j:%%k:%%l
          If %%i == %DNI3% (echo DNI: %%i Nombre: %%j Apellidos: %%k telefono: %%l)
          If %campo% == nombre (
            IF %%j == %modificar% ( set linea=%%i:%mod%:%%k:%%l )
          )
          If %campo% == apellido (
            IF %%k == %modificar% ( set linea=%%i:%%j:%mod%:%%l )
          )
          If %campo% == telefono (
            IF %%l == %modificar% ( set linea=%%i:%%j:%%k:%mod% )
          )
          Echo !linea! >> Nueva_Agenda.txt
        )

        No olvides poner el comando: SETLOCAL ENABLEDELAYEDEXPANSION al inicio del programa.

        Espero que ahora si, sea útil, de esta vez me has enseñado algo nuevo a mi 😉

        Saludos

        • Me da error, cuando elijo la opción a cambiar, pongo por ejemplo el antiguo nombre, el nuevo nombre y luego me sale No se esperaba 1-4 en este momento

          • Hola,

            Es posible que sea por las comillas?? A veces al copiar y pegar de aquí se insertan unas comillas diferentes a las habituales. Para asegurarte bórrarlas y escríbelas con el teclado manualmente.

            Saludos

          • Si, era por las comillas pero igualmente aunque ya no me da error no me modifica nada, me crea el nuevo txt con el registro igual, por el menu no debería ser, y en %campo% le puse %mod% que es el nuevo campo

          • Hola, en el código que pusiste tu inicialmente pone:
            set /p mod= Escriba el nuevo telefono:

            Por lo tanto %mod% entiendo que es el nuevo valor que queremos asignar, así que no se puede sustituir por %campo%

            %campo% debe ser el valor que nos diga cual de los datos tenemos que modificar, asignandolo en el código que pusiste tu arriba quedaría una cosa así:

            :nombre
            set /p modificar= Escriba el nombre a modificar:
            set /p mod= Escriba el nuevo nombre:
            set /a campo=nombre
            goto modif
            
            :apellido
            set /p modificar= Escriba el apellido a modificar:
            set /p mod= Escriba el nuevo apellido:
            set /a campo=apellido
            goto modif
            
            :telefono
            set /p modificar= Escriba el telefono a modificar:
            set /p mod= Escriba el nuevo telefono:
            set /a campo=telefono
            goto modif
            
            :modif
            for /f “tokens=1-4 delims=:” %%i in (Agenda.txt) do (
              set linea=%%i:%%j:%%k:%%l
              If %%i == %DNI3% (echo DNI: %%i Nombre: %%j Apellidos: %%k telefono: %%l)
              If %campo% == nombre (
                IF %%j == %modificar% ( set linea=%%i:%mod%:%%k:%%l )
              )
              If %campo% == apellido (
                IF %%k == %modificar% ( set linea=%%i:%%j:%mod%:%%l )
              )
              If %campo% == telefono (
                IF %%l == %modificar% ( set linea=%%i:%%j:%%k:%mod% )
              )
              Echo !linea! >> Nueva_Agenda.txt
            )
            
            Del /Q “Agenda.txt”
            Rename “Nueva_Agenda.txt” “Agenda.txt”
            
          • No lo entiendo, ahora lo que me hace es duplicar el mismo registro a Agenda.txt en vez de modificarlo. Perdona si soy pesado jeje

  24. Rubens, te pongo el ejemplo completo que he usado yo para más claridad:

    SETLOCAL ENABLEDELAYEDEXPANSION
    @echo off
    :inicio
    set /p campo=que quieres modificar nombre, apellido o telefono?
    if %campo% == nombre goto nombre
    if %campo% == apellido goto apellido
    if %campo% == telefono goto telefono
    echo error, opcion no valida
    goto inicio
     
    :nombre
     set /p modificar= Escriba el nombre a modificar:
     set /p mod= Escriba el nuevo nombre:
     goto modif
     
    :apellido
     set /p modificar= Escriba el apellido a modificar:
     set /p mod= Escriba el nuevo apellido:
     goto modif
     
    :telefono
     set /p modificar= Escriba el telefono a modificar:
     set /p mod= Escriba el nuevo telefono:
     goto modif
     
    :modif
     for /f "tokens=1-4 delims=:" %%i in (Agenda.txt) do (
     set linea=%%i:%%j:%%k:%%l
     If %campo% == nombre (IF %%j == %modificar% ( set linea=%%i:%mod%:%%k:%%l ))
     If %campo% == apellido (IF %%k == %modificar% ( set linea=%%i:%%j:%mod%:%%l ))
     If %campo% == telefono (IF %%l == %modificar% ( set linea=%%i:%%j:%%k:%mod% ))
     echo !linea! >> Nueva_Agenda.txt
     )
    
    Del /Q “Agenda.txt”
    Rename “Nueva_Agenda.txt” “Agenda.txt”
    

    Agenda.txt contiene lo siguiente:

    123:john:smith:1234567
    321:ann:johanson:7654321
    

    Y para probarlo puedes responder a las preguntas con:
    > nombre
    > john
    > Michael

    Saludos

    • Vale, ahora si me funciona, no se que me fallaba si lo tenía igual, ahora para rematar necesito ponerle un error en caso de que el DNI no exista. Se lo pongo antes de elegir lo que quiero modificar pero ponga el DNI que ponga me va decir que no existe y finaliza

      • No se para que usas el DNI, yo en mi ejemplo no lo he usado para nada.

        En cualquier caso yo lo que haría sería comprobar en el bucle si la fila actual contiene el DNI que estás buscando (eso es un if) y asignaría una variable.

        Al final del bucle simplemente tienes que comprobar si esa variable está asignada, si no lo está es que ninguna fila contiene dicho DNI.

        Dale una vuelta a ver si lo consigues, te recomiendo poner el comando echo a lo largo del programa mientras lo estás programando, para ver que valores tienen las variables en todo momento, así es más fácil encontrar los errores.

        Si no lo consigues pásame el código y lo vamos viendo juntos.

        Saludos

        • Tengo puesto lo del DNI para comprobar si existe o no, introduzco el dni, si existe me salta al menu, y en caso de no existir saltar a un mensaje de que no existe, es lo que intento hacer. Voy a mirar lo que me dices a ver

          • Listo, hice un for después del DNI, si ese DNI existe ve a opciones, sino existe ve a mensaje de error y fin de programa

  25. Buenas! Necesito una ayuda para finalizar un ejecutable y ya no se mas que pensar… El mismo extrae todos los .rar dentro de una carpeta y sus subdirectorios gracias al 7z.exe, los elimina una vez extraido y guarda la lista de lo extraido…
    El problema… cuando un rar está en varias partes (part1,part2,part3,etc) el comando extrae y une todo desde la Part1 pero el batch sigue tomando part2, part3 y me pregutna si quiero sobre escribir o omitir, obviamente omito y se elimina cada parte…
    Ahora bien, podrian darme una mano para que directamente omita todos los rar que tengan part2 en adelante y los borre?

    Saludos…

    te dejo parte del codigo..
    ——————————————————————————————
    @echo off
    SETLOCAL EnableDelayedExpansion
    set var1="cualquierdirectorio"
    for /R %%I IN (*.rar) DO (
    %%I | findstr c:/".part"
    IF %errorlevel% EQU 1 && var1==%%~pI (
    echo %%I >> Listado.txt && SET var1=%I% && del /S /Q "%%I"
    )ELSE(
    7z x -o"%%~dpI" "%%I" && echo %%I >> Listado.txt && SET var1=!x!%%I && del /S /Q "%%I")
    )
    )
    pause

    ———————————————————————————————-

  26. Hola de nuevo, ahora necesito ayuda con bash. Se me da algo mejor que los bat pero sigo teniendo problemas. Tengo un ejercicio que ya hice en bat de copiar y mover con parametros. Tengo fallo en los if de si existe o no el fichero o directorio.

    if [ -e $1 ]
    then
    echo No existe el fichero
    exit
    elif [ -d $1 ]
    then
    echo No existe el directorio
    fi

    if [ $3 = copiar ]
    then
    cp $1 $2
    exit
    else
    if [ $3 = mover ]
    then
    mv $1 $2
    exit
    else
    if [ ' $3 = "" ' ]
    then
    echo La sintaxis no es correcta
    fi
    fi
    fi

    • Hola Rubens,

      No entiendo del todo el propósito del programa, pero veo algunas cosas mal.

      Por ejemplo: [ -e test ] es VERDADERO si existe el fichero «test» y [ -d test ] verdadero si existe el directorio «test». Por lo tanto lo que estas haciendo es: Si existe el fichero escribimos: «No existe el fichero».

      Creo que lo que querías es comprobar si NO existe. Para negar, puedes usar el simbolo de exclamación de esta forma:

      if [ ! -e $1 ]
      then
      echo No existe el fichero
      exit
      elif [ ! -d $1 ]
      then
      echo No existe el directorio
      fi
      

      Saludos

  27. Disculpa necesito acceder a mi memoria con un batch pero sólo puedo desde el CMD me podrías decir si hay alguna fucion o de que manera puedo acceder?

    • Hola,

      Con memoria, ¿te refieres a una memoria USB?

      Puedes acceder a ella usando una ruta del sistema por ejemplo si está en la unidad F: F:\miArchivo.txt

      • Si mas o menos así lo había hecho pero accedía, pero creo que era por la computadora le intente en otra y ya se pudo, ahora sólo me falta reescribir, gracias, 4m1g0!

      • A ya vi quería hacer algo como eso el pequeño problema era que quería que el usuario ingresara caracteres como (/:\) en las direcciones y creo que eso era lo que hacia que el script no se ejecutara correctamente gracias por esa sugerencía Martin.

  28. Si, ahora funciona, lo que quería hacer era comprobar si existia el directorio o fichero, y lo que estaba haciendo yo era decirle si era verdadero en vez de negación. Muchas gracias
    Perdona por no responder antes, estos días estuve un poco desconectado jeje, te voy a tener que molestar más con los scripts.
    Tengo un script que tiene que recibir N parametros. Si N es menor que 2 el programa finaliza. El programa tiene que comparar los parametros 2 a 2 indicando si son iguales o no. En caso
    de que el numero de parametros recibidos sea impar, el ultimo parametro no tendra con quien compararse. Para este ultimo caso indicaremos por pantalla
    que el parametro no se puede comparar.
    Ejecuto por ejemplo comparar.sh casa perro gato gato rio rio mar cielo sol, y tiene que comparar cada una de las palabras

    Tal como lo tengo ahora mismo me sale siempre número de parametros insuficiente

    #!/bin/bash

    if [ ‘ $2 = «» ‘ ]
    then
    echo Numero de parametros insuficiente
    elif [ ‘ $2 = «» ‘ ]
    then
    echo $1 no tiene pareja
    shift
    shift
    elif [ ‘ $1 = $2 ‘ ]
    then
    echo $1 es igual que $2
    else [ ‘ $1 != $2 ‘ ]
    echo $1 es diferente de $2
    fi

    • Hola de nuevo,

      Perdona la tardanza, yo también he estado liado últimamente.

      Ante de nada un aviso para el resto que estén leyendo este comentario: Esto es BASH, no BATCH, es un lenguaje diferente ampliamente usado en Linux, pero no tiene relación con el tutorial.

      Lo primero que no entiendo es por que usas comillas simples (‘) en los ifs. (Es posible que tengan alguna función que desconozco, si es así agradecería que me lo aclarases)

      El primer if que usas, si te fijas, estás preguntando si $2 están en blanco hacemos algo, en caso contrario (elif), si $2 está en blanco, hacemos otra cosa. Si te fijas esto no tiene sentido.

      Por otro lado, vas a necesitar un bucle para comparar todos los parámetros independientemente de cuantos haya.

      Yo empezaría por comprobar si tienes al menos 2 parámetros (-lt less than). con $# puedes ver el numero de parámetros que te quedan y con shift quitas el primero y desplazas todos una posición:

      if [ $# -lt 2 ]
      then
      echo numero insuficiente de parametros
      exit
      fi
      

      Una vez hecho esto ya sabes que tienes al menos 2 parámetros (-ge greater or equal). Ahora iniciamos el bucle mientras el número de parámetros restante siga siendo superior a 2:

      while [ $# -ge 2 ]
      do
        if [ $1 -eq $2 ]
        then
          echo $1 es igual a $2
        else
          echo $1 es distinto de $2
        fi
        shift
        shift
      done
      

      Si te fijas lo último que hago en el bucle es desplazar 2 veces los parámetros, para que en $1 y $2 estén los 2 siguientes parámetros la próxima vez que entremos en el bucle.

      Al final del programa (al salir del bucle) pueden ocurrir dos cosas:

      • Que todavía quede 1 parámetro
      • Que no quede ninguno

      Esto lo puedes comprobar con un if simple que ya te lo dejo a ti 😉

      Espero que te sea de utilidad.

      Saludos

  29. 4m1g0,

    esperando te encuentres bien.-
    Necesito ayuda para ocultar una contraseña en un archivo bat.-

    set ruta=»\\servidor\appbech»

    set /p USER= USUARIO:

    Set /p PASS= Contrasena:

    net use F: %ruta% %PASS% /user:dominio\%USER%

  30. como obtengo la hora hhmmss batch.. supongo que debo obtenerla por cada parte porque luego necesito completar el nombre de un archivo.txt
    saludos

    • Hola Darío,

      Para obtener la fecha en batch puedes usar la variable %date% el problema es que dependiendo del idioma el formato varía.

      En mi caso si hago: echo %date% me devuelve: Wed 03/15/2017

      Si en tu equipo el formato tambien es ese puedes obtener cada parte así:
      Día: %date:~7,2%
      Mes: %date:~4,2%
      Año: %date:~-4%

      Con eso puedes formatearlo como quieras. Por ejemplo: echo %date:~-4%-%date:~4,2%-%date:~7,2%

      Saludos

  31. en la segunda parte del tutorial en el cod.2 as puesto «hola» sin ‘h’.
    @echo off
    set nombre= Pepito
    echo.
    echo mira aqui: ola %nombre%
    echo.
    pause
    exit

  32. Hola 4m1g0! Te enseño un mini programa que he hecho gracias a tus consejo. Muy útil el tutorial! Mirate el programa pls y si ves algún fallo o algo por el estilo, estaría muy agradecido de que me lo comentases. Si hay algo que le viniese bien al programa no dudes en comentarmelo. Muchas gracias y que lo disfrutes!!

    @echo off
    title PROGRAMA PABLO VIVAS
    color 70
    echo.
    echo Bienvenido a el programa de inteligencia!
    echo.
    echo Siempre que no aparezca nada, o hallas terminado de escribir, PULSA ENTER
    pause>nul
    cls
    echo.
    set/p nombre= Primero quiero saber tu nombre... Como te llamas? (Escribelo)
    pause>nul
    cls
    echo.
    set/p años= Y tu edad?
    pause>nul
    :si/no
    cls
    echo.
    set/p si/no= Hola %nombre%, Quieres calcular algo en  la calculadora?(Si/No)
    if %si/no%==Si goto inicio else goto error2
    if %si/no%==No goto iniciotest else goto error2
    if %si/no%==si goto inicio else goto error2
    if %si/no%==no goto iniciotest else goto error2
    pause>nul
    :error2
    cls
    echo.
    echo Lo siento, no lo entiendo, repitelo porfavor.
    pause>nul
    goto si/no
    :inicio
    cls
    echo.
    set/p variable1= Que quieres, sumar, restar, dividir o multiplicar?
    if %variable1%==sumar goto sumar else goto error1
    if %variable1%==dividir goto dividir else goto error1
    if %variable1%==restar goto restar else goto error1
    if %variable1%==multiplicar goto multiplicar else goto error1
    if %variable1%==Sumar goto sumar else goto error1
    if %variable1%==Dividir goto dividir else goto error1
    if %variable1%==Restar goto restar else goto error1
    if %variable1%==Multiplicar goto multiplicar else goto error1
    pause>nul
    cls
    :error1
    echo.
    echo Lo siento, no lo entiendo, repitelo porfavor.
    pause>nul
    goto inicio
    :Sumar
    cls
    echo.
    set/p numero1= Dime tu primer numero
    pause>nul
    cls
    echo.
    set/p numero2= Dime tu segundo numero
    set/a suma = %numero1% + %numero2%
    pause>nul
    cls
    echo.
    echo El resultado es %suma%
    pause>nul
    goto continuar
    :dividir
    cls
    echo.
    set/p num3= Dime un numero
    pause>nul
    cls
    echo.
    set/p num4= Dime otro numero para divirlo al anterior
    set/a division= %num3% / %num4%
    pause>nul
    cls
    echo.
    echo El resultado es %division%
    pause>nul
    :continuar
    cls
    echo.
    set/p si/no= Quieres continuar calculando?.(Si/No)
    if %si/no%==Si goto inicio
    if %si/no%==No goto iniciotest
    if %si/no%==si goto inicio
    if %si/no%==no goto iniciotest
    :error2
    echo.
    echo Lo siento, no lo entiendo, repitelo porfavor.
    pause>nul
    goto continuar
    :multiplicar
    echo.
    cls
    echo.
    set/p num5= Dime un numero
    pause>nul
    cls
    echo.
    set/p num6= Dime otro numero para multiplicarlo por el anterior
    set/a multiplicacion= %num5% * %num6%
    pause>nul
    cls
    echo.
    echo El resultado es %multiplicacion%
    pause>nul
    goto continuar
    :restar
    echo.
    cls
    echo.
    set/p num7= Dime un numero
    pause>nul
    cls
    echo.
    set/p num8= Dime otro numero para restar el anterior
    set/a resta= %num7% - %num8%
    pause>nul
    cls
    echo.
    echo El resultado es %resta%
    pause>nul
    goto continuar
    pause>nul
    :iniciotest
    cls
    echo.
    set/p test= Quieres hacer un test?(Si/No)
    if %test%==Si goto test
    if %test%==No goto final calculadora
    if %test%==si goto test
    if %test%==no goto final calculadora
    echo.
    pause>nul
    :test
    cls
    echo.
    set/p test1= Completa la serie: 6, 1, 8, 3, 10...(A=4 B=5 C=12 D=7)
    if %test1%==A goto errortest1
    if %test1%==B goto correctotest1
    if %test1%==C goto errortest1
    if %test1%==D goto errortest1
    if %test1%==a goto errortest1
    if %test1%==b goto correctotest1
    if %test1%==c goto errortest1
    if %test1%==d goto errortest1
    if %test1%==4 goto errortest1
    if %test1%==5 goto correctotest1
    if %test1%==12 goto errortest1
    if %test1%==7goto errortest1
    pause>nul
    cls
    echo.
    echo Lo siento, no te he entendido bien.
    pause>nul
    goto test
    pause>nul
    :errortest1
    cls
    echo.
    echo Respuesta incorrecta, la serie va de dos en dos cada dos numeros.
    pause>nul
    goto test2
    pause>nul
    :correctotest1
    cls
    echo.
    echo Bien hecho!
    pause>nul
    :test2
    cls
    echo.
    set/p test2= Segunda prueba: Cuantos meses tienen 28 dias al año? (A=1, B=Todos, C=2)
    if %test2%==A goto errortest2
    if %test2%==B goto correctotest2
    if %test2%==C goto errortest2
    if %test2%==a goto errortest2
    if %test2%==b goto correctotest2
    if %test2%==c goto errortest2
    if %test2%==1 goto errortest2
    if %test2%==todos goto correctotest2
    if %test2%==2 goto errortest2
    pause>nul
    cls
    echo.
    echo Lo siento, no te he entendido bien.
    pause>nul
    goto test2
    pause>nul
    :errortest1
    cls
    echo.
    echo Respuesta incorrecta, todos los meses contienen 28 dias
    pause>nul
    goto test3
    :errortest2
    cls
    echo.
    echo Respuesta incorrecta, Intentelo de nuevo
    pause>nul
    goto test2
    :correctotest2
    cls
    echo.
    echo Bien hecho!
    pause>nul
    :test3
    cls
    echo.
    set/p test3= Tercera prueba: El padre de Ana tiene 5 hijos: Pata, Pete, Pito, Pota y... ¿Como se llama la quinta hija?(Escribelo en MAYUSCULAS)
    if %test3%==ANA goto correctotest3
    if %test3%==PUTA goto errortest3
    pause>nul
    cls
    echo.
    echo Lo siento, no te he entendido bien. Rescuerda poner el nombre en MAYUSCULAS
    pause>nul
    goto test3
    :errortest3
    cls
    echo.
    echo Respuesta incorrecta, como es el padre de Ana, Ana sera su quinta hija
    pause>nul
    goto final calculadora
    :correctotest3
    cls
    echo.
    echo Bien hecho! Eres muy inteligente... Llegaras muy lejos
    pause>nul
    :final calculadora
    cls
    echo.
    echo Muchas gracias, has acabado el programa de inteligencia!
    pause>nul
    exit
    
    • Hola Pablo,

      Impresionante, me ha encantado el programa y me has pillado con la de los meses de 28 días…

      La verdad es que no le veo ninguna pega, has tenido en cuenta cualquier tipo de respuesta como por ejemplo en la serie que se puede responder B, b o incluso 5, eso me ha encantado.

      Por decirte una curiosidad simplemente. A la hora de dividir hay un caso especial que todos los programas profesionales deben controlar, y que (aun que parezca mentira), sigue siendo el motivo de que muchos programas «crasheen» y se cierren solos. Y es que no se puede dividir por 0, es matemáticamente imposible. En este caso bash lo maneja, pero lo habitual es poner un if para comprobar eso específicamente.

      Por curiosidad. ¿Cuantos años tienes? ¿Cómo te interesaste por la programación? ¿Te gustaría continuar aprendiendo?

      Un saludo y muchas gracias por tu comentario 😉

      • Muchas gracias por mirarlo y por lo de la división!
        Tengo 14 años y estoy muy liado porque no se que voy a hacer de mayor… Programación es una de esas opciones(la más probable que elija). Me interesé un día que un niño vino al colegio con un pen-drive diciendo:»Si pongo este pendrive en el ordenador se te borra todo». Me interesó y fui a mirar en yt como hacer un programa de esos. Averigüe el .bat y el lenguaje, lo busqué en internet y me salió esto.

        Si que quiero seguir aprendiendo, tanto que ya tengo pensado investigar lo que puede hacer linux, he mirado varios comentarios de este foro y me he metido en links como por ejemplo el de como es la pagina web por dentro…

        Me he dado cuenta que pones mucho una página en inglés de programación, no se me da mal el inglés pero hay algunas cosas que no entiendo, sabes alguna otra página como esa pero que este en español? te lo agradecería.

        Muchas gracias por mirarlo y nos vemos!!!

    • Por cierto, tengo otra duda.
      Cuando tienes que responder a alguna cosa (en el mini programa) como por ejemplo lo de sumar, restar… le tengo que dar dos veces al enter: una para confirmar lo que he escrito y otra para pasar a la siguiente pregunta. ¿hay alguna manera para que con un solo enter puedas pasar?

      No se si me entiendes, no me suelo explicar muy bien… Hasta pronto

    • Por cierto (siento la pesadez) También estoy investigando programas como Java Script, Phyton, C++… te sebes alguna web que te explique todo esto? Muchas gracias y nos vemos!

      • Hola!

        Te intento responder a todo:

        La doble pausa es por que el set/p ya hace un «pause» automáticamente, al estar poniendo un pause>nul a mayores estás haciendo la segunda de las paradas. Creo que te refieres a esto.

        Con respecto a lo del inglés: Es el idioma «estándar» en ámbitos de investigación, por lo tanto la información más avanzada y más completa normalmente va a estar en inglés. El 90% de lo que leo y escribo a lo largo del día es en inglés y por eso la mayor parte de recursos que conozco son en ese idioma. Pero a nivel básico e intermedio tienes un montón de contenido en Español, más abajo te dejo algunos enlaces. (No te agobies si no te sientes cómodo con contenido en inglés, poco a poco te irás acostumbrando sin que te des cuenta, pero te recomiendo que no dejes de dar clases siempre que puedas)

        Con respecto a como comenzó a interesarte, te comento que me pasó exactamente lo mismo que a ti, de hecho hasta hace poco tenia un post de «como crear un virus en bat» en este blog, pero lo borré por que me parecía poco profesional je je. Con lo que sabes ahora, estoy seguro que eres capaz de crear un programilla que te bloquee el ordenador: haciendo por ejemplo un open cmd y volviendo al inicio para abrir un monton de cmds…

        Con respecto a Linux, desde luego es un mundo que te recomiendo, pero sin agobiarte por ahora, yo no uso Windows para nada a día de hoy, solo Linux.

        Con respecto a que hacer ahora, te recomiendo html + javascript, y si quieres una continuación más compleja de bat puedes meterte directamente con un lenguaje como C o C++

        WEB html/javascript: https://desarrolloweb.com/manuales/publicar-webs-internet.html
        Javascript: https://desarrolloweb.com/javascript/

        Para C/C++ mi recomendación es que NO uses Visual Studio. Si no algo como Code Blocks: http://www.codeblocks.org/downloads/26
        Y te recomiendo este tutorial: http://c.conclase.net/curso/index.php?cap=000#inicio

        Cualquier cosa me vas comentando. Si quieres abre un nuevo hilo en el foro (En cualquier lado) https://todohacker.com/forum/

        Y ahí te ayudo con lo que necesites.

        Saludos

        • Hey Amigo! 4m1g0 (soy Pablo Vivas
          Tengo varias dudas…
          La primera tiene que ver con la del perfil, una es un fallo y otro es una pregunta, cuando yo inicio sesión me pide, para confirmar de que no soy un robot, introducir un código un poco disimulado que hasta a mí me cuesta poner, lo he puesto como unas 5 veces hasta que al final me ha funcionado.

          Quizás deberiais cambiar eso de la seguridad y ponerlo do otra forma… La segunda cuestión es que al ir a elegir el icono que quiro que aparzca en mi perfil, me dices q valla a una página en concreto para que me lo cree allí. Una vez creado todo, no se ha donde darle para que se me ponga como foto y me tiene un poco mosqueado…

          Sobre la programación, estoy investigando en XCode ¿te suena?(supongo que sí eres programador). Me preguntaba, como tengo ahora un mac, y hay algunas limitaciones en cuanto programar con algunos programas, hay alguno que sea C++ en mac? Y antes de todo, que lenguage me recomiendas, me he mirado videos viendo cual es el más recomendable pero cada uno me dice una cosa…

          Muchas gracias por todo y nos vemos!!

          • Hola,

            Gracias por avisar de lo del registro, lo puse complicado por que se registraban muchos bots para hacer spam, pero la verdad es que está demasiado complicado todo el proceso de registro, voy a cambiarlo.

            Con respecto a la imagen de perfil, está vinculada con Gravatar. Si te registras en https://es.gravatar.com/ con el mismo correo que aquí automáticamente aparecerá el avatar que selecciones en gravatar. Pero tarda un poco en aparecer.

            Con respecto a mac, no te puedo ayudar por que no lo uso. Pero en mi opinión personal los entornos de mac estan pensados para generar dependencia hacia la empresa Apple y es algo con lo que estoy muy en contra, por lo tanto simplemente recomendarte ser siempre crítico y no dejarte llevar.

            Con Xcode puedes trabajar con C++ Xcode > File > New > Project > Command Line Tool > Next > Language -> C++

            El programa que te recomendaba antes: Code Blocks, está disponible para mac también.

            Con respecto a los lenguajes, yo empecé directamente con C++ pero no es fácil, puedes probarlo y vas viendo tu mismo, otras opciones son javascript (solo necesitas un navegador web para programarlo) y python (es bastante fácil)

            Por otro lado BATCH es un lenguaje de windows, y no está disponible en mac, tanto mac como linux usan BASH, un lenguaje mucho mas potente pero se parece bastante, en alguno de los comentarios más arriba hice referencia a el.

            Ánimo y poco a poco 😉
            Saludos

          • Ya he actualizado la página, el registro es más sencillo, además ahora, si quieres, puedes subir tu avatar directamente, sin usar Gravatar.

            Saludos

          • Muchas gracias!!! Ya tengo mi bonita foto de perfil:)

            Gracias tmb por lo del C++ y lo del BASH… Tu, habiendo empezado en C++, que me recomiendas, empezar por el fácil (phyton) o por el C++. A la hora de lo profesional, el lenguaje más utilizado es el C++ o son todos más o menos por igual?

            Muchas gracias y nos vemos amigo!

            Pablo V

          • Actualmente se está trabajando mucho con Python por que es más rápido a la hora de desarrollar pero menos potente, lo mismo pasa con javascript, también se está usando un montón. Pero C y C++ siguen siendo muy importantes. Aquí tienes una lista de lenguajes más usados: https://www.tiobe.com/tiobe-index/

            De todos modos no te preocupes, el lenguaje no importa tanto, lo importante es aprender a programar, una vez conozcas 2 lenguajes el resto te van a resultar muy fáciles de aprender. Ye te recomendaría que le echases un vistazo a C++ y me pondría como reto hacer el mismo programa que hiciste en batch, pero en C++. Cuando lo consigas ya sabrás lo necesario para tomar una decision sobre por donde continuar.

            Cualquier cosa referente a lo que vayas aprendiendo, puedes comentarla en el foro (te respondí allí también) y la vamos viendo.

            https://todohacker.com/forum/preguntas/

            Saludos

  33. Buenas tardes mi duda es que necesito crear un .bat o .bash que al momento abrirlo abra el ejecutar o run y ahi ponga una ip con la cual se hagan ciertas funciones igual ya eso lo puedo hacer yo el problema es asignarle la ip que quiero al abrirse el ejecutar pero al abrirse solo se queda cmd y nose como insertar los caracteres deseados, nose si me explique.

  34. quiero usar una variable en un batch para revisar memorias USB, por ejemplo:
    set /p var= Que USB quiere revisar?
    if %var%==d goto d:
    if %var%==e goto e:
    if %var%==f goto f:

    La gran pregunta: se puede o hay otra forma

    • La pregunta la voy a responder yo mismo, porque buscando por ahí encontré lo que necesitaba.

      set/p var=Que USB quiere revisar? E – F – G – H ?
      Attrib -r -a -h -s %var%:\*.* /S /D
      dir %var%:

      Este codigo te pregunta que USB quieres revisar, luego cambia los atributos de carpetas y subdirectorios, y finalmente te da el directorio de esa USB.

        • Mi duda fue siempre con los virus que se propagan por los USB de forma invisible.
          Para esto los hackers usan el comando attrib para ocultar los virus y los scrip.
          Asi que al poner ese comando antes de pedir el directorio voy a ver todos los archivos incluso los que posiblemente esten ocultos.

          Saludos

    • mira, eso de cambiar algo dentro de Windows, generalmente tiene que ver con el registro. Allí hay que buscar que parte controla los grupos de trabajo y asi poder cambiarlos. puedes hacer la misma pregunta en lawebdelprogramador.com

      Suerte!

      • Hola 4m1g0 y Bruno:
        revise la fuente para cambiar el nombre de grupo y ahí hay una advertencia que la tradusco:
        «Asegúrese de cambiar NEW_WORKGROUP_NAME al nombre real del grupo de trabajo del que desea que el equipo sea parte (y sí, las comillas son necesarias para que el comando funcione).

  35. Hola pido ayuda para renombrar quiero quitar los paréntesis a varios archivos: quedando como ejemplo:

    18100607_1900000470_ (1).xml quedando 18100607_1900000470_ 1.mxl
    18100607_1900000470_ (2).xml quedando 18100607_1900000470_ 2.mxl

    • Hola Cesar,

      Es una pregunta muy interesante y una utilidad que poca gente conoce.

      En bash se pueden reemplazar caracteres de una variable utilizando esta nomenclatura:

      %variable:A=B%

      Siendo «variable» el nombre de la variable, la letra A se reemplazará por B.

      Ejemplo:
      set file=archivo.txt
      echo %file:t=g%
      archivo.gxg

      En el caso en que pides, tendrías que hacer dos reemplazos, suponiendo que tienes el nombre del fichero en la variable %file% quedaría así:

      set file1=%file:(=%
      set file1=%file1:)=%
      ren %file% %file1%

      Con el comando ren, renombramos el fichero.

      Saludos

  36. Hola a todos, tengo una nueva:
    Resulta que algunos computadores cuando parten el CHKDSK hace una revisión, lo cual esta bien, pero cada vez que parte ya es una molestia. Encontré un comando para quitar esto desde CMD «chkntfs /x c: » La X es para desbloquear. Pero quise hacer un batch:

    set/p U=EN QUE UNIDAD PARTE EL CHKDSK? C – D – E – F – G – H ?
    CHKNTFS %U%: /X
    %U%:

    cuando lo ejecuto me dice » el tipo del sistema de archivos es NTFS. No se puede bloquear la unidad actual.CHKDSK no se puede ejecutar porque otro proceso ya esta usando el volumen. Desea que se prepare el volumen para que sea comprobado la proxima vez que se reinicie el sistema S/N. »
    Creo que esto pasa porque en mi compu el CHKDSK no esta haciendo esta revision cada vez que parte.

    O es algo más?

    • Hola,

      A mi no me da ningún error pobándolo en un Windows 10 HOME V1703.

      En todo caso, el sistema no debería hacer una comprobación de disco cada vez que inicia, si está haciendo eso es que hay algo mal o que el disco se está dañando físicamente y podría dejar de funcionar en cualquier momento (lo cual implicaría perder los datos). Por lo tanto cuidado con eso.

      Saludos

      • Te escucho 4m1gO, gracias por el consejo, lo probare con un compu que presente esa revision, para ver si funciona el desabilitarlo.

        Martin

    • Hola,

      Windows no puede comprimir o descomprimir un archivo, necesita un programa que lo haga… A pesar de que este programa viene integrado en el explorador de carpetas, no lo han añadido a la linea de commandos, por lo tanto no podemos comprimir o descomprimir archivos directamente.

      Lo que si puedes hacer es descargar un programa que comprima y descomprima en zip y luego ejecutarlo usando la ruta completa a donde los has descargado.

      Por ejemplo: http://www.7-zip.org/download.html

      7z e archivo.zip

      Esto nos descomprimiría el archivo «archivo.zip»

      Saludos

  37. hola, veo que respondes con muchas ganas.
    Estuve buscando un par de horas… y solo encontre como iniciar un programa con una prioridad cambiada, ya sea alta o baja, pero no logre encontrar un metodo para al YA ESTAR EJECUTANDOSE se cambie la prioridad al programa… ¿Existe alguna forma de hacer eso con un batch u otro archivo o programa que lo hace sencillo? (porque para estar haciendolo cada vez llendo al adm. de tareas. > detalles, paso)

    • Hola Iván!

      Antes de nada me da curiosidad por que quieres cambiar la prioridad de un programa jeje. Antiguamente tenia un poco más de sentido, pero a día de hoy en ordenadores de escritorio no le veo mucha utilidad.

      Para cambiar la prioridad de un proceso en ejecución en windows hay que usar el WMIC (Windows Management Instrumentation Command-line) que es un servicio que se maneja con una sintaxis similar a SQL. Por ejemplo, para cambiar a IDLE (la más baja) la prioridad de un proceso, ejecutaríamos lo siguiente:

      wmic process where name="notepad.exe" CALL setpriority "idle"

      Las prioridades disponibles, por orden son:
      «idle», «below normal», «normal», «above normal», «high priority», «realtime»

      Como cambiar la prioridad de un proceso en ejecución en windows, batch

      Tienes más información aquí: https://msdn.microsoft.com/en-us/library/aa393587(v=vs.85).aspx

      Y aquí: https://stackoverflow.com/questions/23996307/set-process-priority-on-already-running-process-batch-file

      Saludos

      • Muchisimas gracias, de verdad!.
        Me funciona de maravilla.

        Esto te puede sonar medio WTF, pero lo queria para bajar la prioridad de los procesos del launcher de League of Legends y que asi el main (cliente in game) funcione mejor, ya que el launcher esta/ba mal optimizado y genera/ba baja en los FPS. Pusieron una opcion para cerrar el launcher cuando estas en partida, pero al terminar la partida y volver al launcher, tarda en cargar, porque tiene que volver a abrirse (automatico).
        Entonces me parece que dejando los procesos con baja prioridad (son 4 del launcher) funcionaria mejor y podria evitarse tener que seleccionar la opcion de autocierre del launcher cuando estas en partida.

        Quiza me equivoque, pero hare las pruebas al menos.
        Gracias =)

        Pd: habia olvidado revisar, pero lo tenia en marcadores para no olvidar.

        • Genial, me alegro que te haya servido.

          Me interesa bastante saber si notas mejoría o no finalmente, si tienes un rato cuando lo pruebes para pasar a comentarnos que tal, te lo agradezco.

          En teoría debería mejorar pero, como dije antes, en la actualidad con los procesadores multinúcleo y tal como funcionan las aplicaciones, yo nunca he notado una mejoría apreciable.

          Saludos!

  38. Hola amigo, estupendo trabajo.

    Necesito hacer una busqueda diaria de un archivo en una carpeta. Si el archivo se encuentra es necesario alertarlo con un mensaje o enviando un correo electrónico.

    • Hola David,

      Si el archivo esta siempre en la misma carpeta puedes comprobar si existe de esta forma:

      if exist test.html
      msg «%username%» el archivo existe!!

      Para ejecutar automáticamente este programa todos los días lo más fácil es que crees una tarea programada de windows.

      Para ello vas a inicio > Programador de tareas > Biblioteca del programador de tareas.

      Seleccionas «Crear tarea básica» y sigues las instrucciones. La acción que debes configurar es «ejecutar programa» seleccionando la ruta de tu programa en batch.

      Saludos

  39. Hola, antes que nada, agradezco mucho tu tiempo y dedicación con este tutorial.
    Tengo una duda y quisiera que me ayudaras si te es posible.
    Tengo un archivo .bat que me realiza una copia de los archivos pdf de mi usb cada vez que la conecto al pc, lo con el comando XCOPY:
    @Echo Off
    For %%D in (
    G I J K L M N O P Q R S T U V W X Y Z
    ) Do (
    If Exist «%%D:\» (
    xcopy %%D:*.pdf D:\William\backup /e /i

    )
    )
    Exit
    El problema es que últimamente he querido aplicar este proceso para realizar la copia de las fotos de mi celular, pero no funciona y creo que es porque el equipo no lo reconoce igual que a una usb, no le asigna una letra…. Lo reconoce como un reproductor multimedia portátil, aun asi puedo acceder a los archivos manualmente.
    Quisiera saber si existe algún método para apuntar la ruta necesaria en el comando XCOPY hacia mi celular

    Muchas gracias de antemano y anticipadamente

    • No sé porqué no te da una letra cuando lo conectas, debería y después tienes que mirar cual es el directorio donde están las fotos, por ejemplo F:\android\images\pictures y ponerlo en el batch con cd f:\android\images\pictures
      xcopy ………….

  40. Hola Martin, gracias por el aporte. Te comento que utilice un condigo .bat para proteger una carperta. La verdad no tengo nociones de programar y creo me meti en un lio, ya que al momento de abrir la carpeta esta me aparece vacia. se que estan ahí los archivos ya que solo deje la carpeta donde está el ejecutable. el espacio en disco coincide con el tamaño de mis archivos, pero no puede accesar a estos.
    me puedes dar una idea de que carajos hacer, para recuperar mis 64GB de información?
    Gracias por la atención.

    • Seguramente has ejecutado un comando que te ha dejado sin permisos de lectura sobre la carpeta.

      Prueba a ejecutar: icacls «C:\ruta\a\carpeta» /grant Everyone:M

      Sustituyendo la ruta de tu carpeta. Si esto no funciona, dinos que has ejecutado exactamente a ver si podemos ayudarte.

      Saludos

  41. saludos hermano 4m1g0 y demas hermanos de todohacker. Me da mucho gusto que este post exista.Este simple programa lo hice aprovechando cada uno de sus ejemplos y comentarios es la app TABLAs .bat y se la dedique a mi hija Ktaherin zaldivar Paz q ya esta en 4 grado. gracias a todos ustedes por compartir su conocimiento.que se mantenga el post y espero q 4m1g0 siga con el proximo tutorial. humildemente hasta la proxima. Que DIOS los bendiga.

    @echo off
    title TABLAS DE MULTIPLICACION
    color 0a
    echo.
    set/p nombre=ESCRIBE TU NOMBRE POR FAVOR: 
    cls
    :Menu
    cls
    echo SELECIONE LA TABLA.
    echo.
    echo :::: 1  2  3  4  5  6  7  8  9  10 :::
    echo.
    echo.
    set /p var=
    cls
    if %var%==1 goto iniciotabla1
    if %var%==2 goto iniciotabla2
    if %var%==3 goto iniciotabla3
    if %var%==4 goto iniciotabla4
    if %var%==5 goto iniciotabla5
    if %var%==6 goto iniciotabla6
    if %var%==7 goto iniciotabla7
    if %var%==8 goto iniciotabla8
    if %var%==9 goto iniciotabla9
    if %var%==10 goto iniciotabla10
    :iniciotabla1
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 1 ********* 
    echo.
    echo.
    :inicio1x0
    color 0a
    echo.
    set/p producto= 1 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto1x0 else goto incorrecto1x0
    :incorrecto1x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x0
    :correcto1x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x1
    color 0a
    echo.
    set/p producto= 1 x 1 =
    cls
    echo.
    if %producto%==1 goto correcto1x1 else goto incorrecto1x1
    :incorrecto1x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x1
    :correcto1x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x2
    color 0a
    echo.
    set/p producto= 1 x 2 =
    cls
    echo.
    if %producto%==2 goto correcto1x2 else goto incorrecto1x2
    :incorrecto1x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x2
    :correcto1x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x3
    color 0a
    echo.
    set/p producto= 1 x 3 =
    cls
    echo.
    if %producto%==3 goto correcto1x3 else goto incorrecto1x3
    :incorrecto1x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x3
    :correcto1x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x4
    color 0a
    echo.
    set/p producto= 1 x 4 =
    cls
    echo.
    if %producto%==4 goto correcto1x4 else goto incorrecto1x4
    :incorrecto1x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x4
    :correcto1x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x5
    color 0a
    echo.
    set/p producto= 1 x 5 =
    cls
    echo.
    if %producto%==5 goto correcto1x5 else goto incorrecto1x5
    :incorrecto1x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x5
    :correcto1x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x6
    color 0a
    echo.
    set/p producto= 1 x 6 =
    cls
    echo.
    if %producto%==6 goto correcto1x6 else goto incorrecto1x6
    :incorrecto1x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x6
    :correcto1x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x7
    color 0a
    echo.
    set/p producto= 1 x 7 =
    cls
    echo.
    if %producto%==7 goto correcto1x7 else goto incorrecto1x7
    :incorrecto1x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x7
    :correcto1x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x8
    color 0a
    echo.
    set/p producto= 1 x 8 =
    cls
    echo.
    if %producto%==8 goto correcto1x8 else goto incorrecto1x8
    :incorrecto1x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x8
    :correcto1x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x9
    color 0a
    echo.
    set/p producto= 1 x 9 =
    cls
    echo.
    if %producto%==9 goto correcto1x9 else goto incorrecto1x9
    :incorrecto1x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x9
    :correcto1x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio1x10
    color 0a
    echo.
    set/p producto= 1 x 10 =
    cls
    echo.
    if %producto%==10 goto correcto1x10 else goto incorrecto1x10
    :incorrecto1x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio1x10
    :correcto1x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 1 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla2
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 2 ********* 
    echo.
    echo.
    :inicio2x0
    color 0a
    echo.
    set/p producto= 2 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto2x0 else goto incorrecto2x0
    :incorrecto2x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x0
    :correcto2x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x1
    color 0a
    echo.
    set/p producto= 2 x 1 =
    cls
    echo.
    if %producto%==2 goto correcto2x1 else goto incorrecto2x1
    :incorrecto2x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x1
    :correcto2x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x2
    color 0a
    echo.
    set/p producto= 2 x 2 =
    cls
    echo.
    if %producto%==4 goto correcto2x2 else goto incorrecto2x2
    :incorrecto2x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x2
    :correcto2x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x3
    color 0a
    echo.
    set/p producto= 2 x 3 =
    cls
    echo.
    if %producto%==6 goto correcto2x3 else goto incorrecto2x3
    :incorrecto2x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x3
    :correcto2x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x4
    color 0a
    echo.
    set/p producto= 2 x 4 =
    cls
    echo.
    if %producto%==8 goto correcto2x4 else goto incorrecto2x4
    :incorrecto2x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x4
    :correcto2x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x5
    color 0a
    echo.
    set/p producto= 2 x 5 =
    cls
    echo.
    if %producto%==10 goto correcto2x5 else goto incorrecto2x5
    :incorrecto2x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x5
    :correcto2x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x6
    color 0a
    echo.
    set/p producto= 2 x 6 =
    cls
    echo.
    if %producto%==12 goto correcto2x6 else goto incorrecto2x6
    :incorrecto2x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x6
    :correcto2x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x7
    color 0a
    echo.
    set/p producto= 2 x 7 =
    cls
    echo.
    if %producto%==14 goto correcto2x7 else goto incorrecto2x7
    :incorrecto2x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x7
    :correcto2x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x8
    color 0a
    echo.
    set/p producto= 2 x 8 =
    cls
    echo.
    if %producto%==16 goto correcto2x8 else goto incorrecto2x8
    :incorrecto2x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x8
    :correcto2x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x9
    color 0a
    echo.
    set/p producto= 2 x 9 =
    cls
    echo.
    if %producto%==18 goto correcto2x9 else goto incorrecto2x9
    :incorrecto2x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x9
    :correcto2x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio2x10
    color 0a
    echo.
    set/p producto= 2 x 10 =
    cls
    echo.
    if %producto%==20 goto correcto2x10 else goto incorrecto2x10
    :incorrecto2x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio2x10
    :correcto2x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 2 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla3
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 3 ********* 
    echo.
    echo.
    :inicio3x0
    color 0a
    echo.
    set/p producto= 3 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto3x0 else goto incorrecto3x0
    :incorrecto3x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x0
    :correcto3x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x1
    color 0a
    echo.
    set/p producto= 3 x 1 =
    cls
    echo.
    if %producto%==3 goto correcto3x1 else goto incorrecto3x1
    :incorrecto3x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x1
    :correcto3x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x2
    color 0a
    echo.
    set/p producto= 3 x 2 =
    cls
    echo.
    if %producto%==6 goto correcto3x2 else goto incorrecto3x2
    :incorrecto3x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x2
    :correcto3x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x3
    color 0a
    echo.
    set/p producto= 3 x 3 =
    cls
    echo.
    if %producto%==9 goto correcto3x3 else goto incorrecto3x3
    :incorrecto3x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x3
    :correcto3x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x4
    color 0a
    echo.
    set/p producto= 3 x 4 =
    cls
    echo.
    if %producto%==12 goto correcto3x4 else goto incorrecto3x4
    :incorrecto3x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x4
    :correcto3x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x5
    color 0a
    echo.
    set/p producto= 3 x 5 =
    cls
    echo.
    if %producto%==15 goto correcto3x5 else goto incorrecto3x5
    :incorrecto3x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x5
    :correcto3x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x6
    color 0a
    echo.
    set/p producto= 3 x 6 =
    cls
    echo.
    if %producto%==18 goto correcto3x6 else goto incorrecto3x6
    :incorrecto3x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x6
    :correcto3x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x7
    color 0a
    echo.
    set/p producto= 3 x 7 =
    cls
    echo.
    if %producto%==21 goto correcto3x7 else goto incorrecto3x7
    :incorrecto3x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x7
    :correcto3x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x8
    color 0a
    echo.
    set/p producto= 3 x 8 =
    cls
    echo.
    if %producto%==24 goto correcto3x8 else goto incorrecto3x8
    :incorrecto3x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x8
    :correcto3x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x9
    color 0a
    echo.
    set/p producto= 3 x 9 =
    cls
    echo.
    if %producto%==27 goto correcto3x9 else goto incorrecto3x9
    :incorrecto3x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x9
    :correcto3x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio3x10
    color 0a
    echo.
    set/p producto= 3 x 10 =
    cls
    echo.
    if %producto%==30 goto correcto3x10 else goto incorrecto3x10
    :incorrecto3x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio3x10
    :correcto3x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 3 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla4
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 4 ********* 
    echo.
    echo.
    :inicio4x0
    color 0a
    echo.
    set/p producto= 4 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto4x0 else goto incorrecto4x0
    :incorrecto4x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x0
    :correcto4x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x1
    color 0a
    echo.
    set/p producto= 4 x 1 =
    cls
    echo.
    if %producto%==4 goto correcto4x1 else goto incorrecto4x1
    :incorrecto4x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x1
    :correcto4x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x2
    color 0a
    echo.
    set/p producto= 4 x 2 =
    cls
    echo.
    if %producto%==8 goto correcto4x2 else goto incorrecto4x2
    :incorrecto4x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x2
    :correcto4x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x3
    color 0a
    echo.
    set/p producto= 4 x 3 =
    cls
    echo.
    if %producto%==12 goto correcto4x3 else goto incorrecto4x3
    :incorrecto4x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x3
    :correcto4x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x4
    color 0a
    echo.
    set/p producto= 4 x 4 =
    cls
    echo.
    if %producto%==16 goto correcto4x4 else goto incorrecto4x4
    :incorrecto4x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x4
    :correcto4x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x5
    color 0a
    echo.
    set/p producto= 4 x 5 =
    cls
    echo.
    if %producto%==20 goto correcto4x5 else goto incorrecto4x5
    :incorrecto4x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x5
    :correcto4x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x6
    color 0a
    echo.
    set/p producto= 4 x 6 =
    cls
    echo.
    if %producto%==24 goto correcto4x6 else goto incorrecto4x6
    :incorrecto4x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x6
    :correcto4x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x7
    color 0a
    echo.
    set/p producto= 4 x 7 =
    cls
    echo.
    if %producto%==28 goto correcto4x7 else goto incorrecto4x7
    :incorrecto4x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x7
    :correcto4x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x8
    color 0a
    echo.
    set/p producto= 4 x 8 =
    cls
    echo.
    if %producto%==32 goto correcto4x8 else goto incorrecto4x8
    :incorrecto4x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x8
    :correcto4x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x9
    color 0a
    echo.
    set/p producto= 4 x 9 =
    cls
    echo.
    if %producto%==36 goto correcto4x9 else goto incorrecto4x9
    :incorrecto4x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x9
    :correcto4x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio4x10
    color 0a
    echo.
    set/p producto= 4 x 10 =
    cls
    echo.
    if %producto%==40 goto correcto4x10 else goto incorrecto4x10
    :incorrecto4x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio4x10
    :correcto4x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 4 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla5
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 5 ********* 
    echo.
    echo.
    :inicio5x0
    color 0a
    echo.
    set/p producto= 5 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto5x0 else goto incorrecto5x0
    :incorrecto5x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x0
    :correcto5x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x1
    color 0a
    echo.
    set/p producto= 5 x 1 =
    cls
    echo.
    if %producto%==5 goto correcto5x1 else goto incorrecto5x1
    :incorrecto5x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x1
    :correcto5x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x2
    color 0a
    echo.
    set/p producto= 5 x 2 =
    cls
    echo.
    if %producto%==10 goto correcto5x2 else goto incorrecto5x2
    :incorrecto5x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x2
    :correcto5x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x3
    color 0a
    echo.
    set/p producto= 5 x 3 =
    cls
    echo.
    if %producto%==15 goto correcto5x3 else goto incorrecto5x3
    :incorrecto5x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x3
    :correcto5x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x4
    color 0a
    echo.
    set/p producto= 5 x 4 =
    cls
    echo.
    if %producto%==20 goto correcto5x4 else goto incorrecto5x4
    :incorrecto5x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x4
    :correcto5x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x5
    color 0a
    echo.
    set/p producto= 5 x 5 =
    cls
    echo.
    if %producto%==25 goto correcto5x5 else goto incorrecto5x5
    :incorrecto5x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x5
    :correcto5x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x6
    color 0a
    echo.
    set/p producto= 5 x 6 =
    cls
    echo.
    if %producto%==30 goto correcto5x6 else goto incorrecto5x6
    :incorrecto5x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x6
    :correcto5x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x7
    color 0a
    echo.
    set/p producto= 5 x 7 =
    cls
    echo.
    if %producto%==35 goto correcto5x7 else goto incorrecto5x7
    :incorrecto5x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x7
    :correcto5x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x8
    color 0a
    echo.
    set/p producto= 5 x 8 =
    cls
    echo.
    if %producto%==40 goto correcto5x8 else goto incorrecto5x8
    :incorrecto5x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x8
    :correcto5x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x9
    color 0a
    echo.
    set/p producto= 5 x 9 =
    cls
    echo.
    if %producto%==45 goto correcto5x9 else goto incorrecto5x9
    :incorrecto5x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x9
    :correcto5x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio5x10
    color 0a
    echo.
    set/p producto= 5 x 10 =
    cls
    echo.
    if %producto%==50 goto correcto5x10 else goto incorrecto5x10
    :incorrecto5x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio5x10
    :correcto5x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 5 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla6
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 6 ********* 
    echo.
    echo.
    :inicio6x0
    color 0a
    echo.
    set/p producto= 6 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto6x0 else goto incorrecto6x0
    :incorrecto6x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x0
    :correcto6x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x1
    color 0a
    echo.
    set/p producto= 6 x 1 =
    cls
    echo.
    if %producto%==6 goto correcto6x1 else goto incorrecto6x1
    :incorrecto6x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x1
    :correcto6x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x2
    color 0a
    echo.
    set/p producto= 6 x 2 =
    cls
    echo.
    if %producto%==12 goto correcto6x2 else goto incorrecto6x2
    :incorrecto6x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x2
    :correcto6x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x3
    color 0a
    echo.
    set/p producto= 6 x 3 =
    cls
    echo.
    if %producto%==18 goto correcto6x3 else goto incorrecto6x3
    :incorrecto6x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x3
    :correcto6x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x4
    color 0a
    echo.
    set/p producto= 6 x 4 =
    cls
    echo.
    if %producto%==24 goto correcto6x4 else goto incorrecto6x4
    :incorrecto6x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x4
    :correcto6x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x5
    color 0a
    echo.
    set/p producto= 6 x 5 =
    cls
    echo.
    if %producto%==30 goto correcto6x5 else goto incorrecto6x5
    :incorrecto6x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x5
    :correcto6x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x6
    color 0a
    echo.
    set/p producto= 6 x 6 =
    cls
    echo.
    if %producto%==36 goto correcto6x6 else goto incorrecto6x6
    :incorrecto6x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x6
    :correcto6x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x7
    color 0a
    echo.
    set/p producto= 6 x 7 =
    cls
    echo.
    if %producto%==42 goto correcto6x7 else goto incorrecto6x7
    :incorrecto6x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x7
    :correcto6x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x8
    color 0a
    echo.
    set/p producto= 6 x 8 =
    cls
    echo.
    if %producto%==48 goto correcto6x8 else goto incorrecto6x8
    :incorrecto6x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x8
    :correcto6x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x9
    color 0a
    echo.
    set/p producto= 6 x 9 =
    cls
    echo.
    if %producto%==54 goto correcto6x9 else goto incorrecto6x9
    :incorrecto6x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x9
    :correcto6x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio6x10
    color 0a
    echo.
    set/p producto= 6 x 10 =
    cls
    echo.
    if %producto%==60 goto correcto6x10 else goto incorrecto6x10
    :incorrecto6x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio6x10
    :correcto6x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 6 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla7
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 7 ********* 
    echo.
    echo.
    :inicio7x0
    color 0a
    echo.
    set/p producto= 7 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto7x0 else goto incorrecto7x0
    :incorrecto7x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x0
    :correcto7x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x1
    color 0a
    echo.
    set/p producto= 7 x 1 =
    cls
    echo.
    if %producto%==7 goto correcto7x1 else goto incorrecto7x1
    :incorrecto7x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x1
    :correcto7x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x2
    color 0a
    echo.
    set/p producto= 7 x 2 =
    cls
    echo.
    if %producto%==14 goto correcto7x2 else goto incorrecto7x2
    :incorrecto7x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x2
    :correcto7x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x3
    color 0a
    echo.
    set/p producto= 7 x 3 =
    cls
    echo.
    if %producto%==21 goto correcto7x3 else goto incorrecto7x3
    :incorrecto7x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x3
    :correcto7x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x4
    color 0a
    echo.
    set/p producto= 7 x 4 =
    cls
    echo.
    if %producto%==28 goto correcto7x4 else goto incorrecto7x4
    :incorrecto7x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x4
    :correcto7x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x5
    color 0a
    echo.
    set/p producto= 7 x 5 =
    cls
    echo.
    if %producto%==35 goto correcto7x5 else goto incorrecto7x5
    :incorrecto7x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x5
    :correcto7x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x6
    color 0a
    echo.
    set/p producto= 7 x 6 =
    cls
    echo.
    if %producto%==42 goto correcto7x6 else goto incorrecto7x6
    :incorrecto7x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x6
    :correcto7x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x7
    color 0a
    echo.
    set/p producto= 7 x 7 =
    cls
    echo.
    if %producto%==49 goto correcto7x7 else goto incorrecto7x7
    :incorrecto7x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x7
    :correcto7x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x8
    color 0a
    echo.
    set/p producto= 7 x 8 =
    cls
    echo.
    if %producto%==56 goto correcto7x8 else goto incorrecto7x8
    :incorrecto7x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x8
    :correcto7x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x9
    color 0a
    echo.
    set/p producto= 7 x 9 =
    cls
    echo.
    if %producto%==63 goto correcto7x9 else goto incorrecto7x9
    :incorrecto7x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x9
    :correcto7x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio7x10
    color 0a
    echo.
    set/p producto= 7 x 10 =
    cls
    echo.
    if %producto%==70 goto correcto7x10 else goto incorrecto7x10
    :incorrecto7x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio7x10
    :correcto7x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 7 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla8
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 8 ********* 
    echo.
    echo.
    :inicio8x0
    color 0a
    echo.
    set/p producto= 8 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto8x0 else goto incorrecto8x0
    :incorrecto8x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x0
    :correcto8x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x1
    color 0a
    echo.
    set/p producto= 8 x 1 =
    cls
    echo.
    if %producto%==8 goto correcto8x1 else goto incorrecto8x1
    :incorrecto8x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x1
    :correcto8x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x2
    color 0a
    echo.
    set/p producto= 8 x 2 =
    cls
    echo.
    if %producto%==16 goto correcto8x2 else goto incorrecto8x2
    :incorrecto8x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x2
    :correcto8x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x3
    color 0a
    echo.
    set/p producto= 8 x 3 =
    cls
    echo.
    if %producto%==24 goto correcto8x3 else goto incorrecto8x3
    :incorrecto8x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x3
    :correcto8x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x4
    color 0a
    echo.
    set/p producto= 8 x 4 =
    cls
    echo.
    if %producto%==32 goto correcto8x4 else goto incorrecto8x4
    :incorrecto8x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x4
    :correcto8x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x5
    color 0a
    echo.
    set/p producto= 8 x 5 =
    cls
    echo.
    if %producto%==40 goto correcto8x5 else goto incorrecto8x5
    :incorrecto8x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x5
    :correcto8x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x6
    color 0a
    echo.
    set/p producto= 8 x 6 =
    cls
    echo.
    if %producto%==48 goto correcto8x6 else goto incorrecto8x6
    :incorrecto8x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x6
    :correcto8x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x7
    color 0a
    echo.
    set/p producto= 8 x 7 =
    cls
    echo.
    if %producto%==56 goto correcto8x7 else goto incorrecto8x7
    :incorrecto8x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x7
    :correcto8x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x8
    color 0a
    echo.
    set/p producto= 8 x 8 =
    cls
    echo.
    if %producto%==64 goto correcto8x8 else goto incorrecto8x8
    :incorrecto8x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x8
    :correcto8x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x9
    color 0a
    echo.
    set/p producto= 8 x 9 =
    cls
    echo.
    if %producto%==72 goto correcto8x9 else goto incorrecto8x9
    :incorrecto8x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x9
    :correcto8x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio8x10
    color 0a
    echo.
    set/p producto= 8 x 10 =
    cls
    echo.
    if %producto%==80 goto correcto8x10 else goto incorrecto8x10
    :incorrecto8x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio8x10
    :correcto8x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 8 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    
    :iniciotabla9
    echo.
    echo  ********* HOLA %nombre% ESTA ES LA TABLA DEL 9 ********* 
    echo.
    echo.
    :inicio9x0
    color 0a
    echo.
    set/p producto= 9 x 0 =
    cls
    echo.
    if %producto%==0 goto correcto9x0 else goto incorrecto9x0
    :incorrecto9x0
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x0
    :correcto9x0
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x1
    color 0a
    echo.
    set/p producto= 9 x 1 =
    cls
    echo.
    if %producto%==9 goto correcto9x1 else goto incorrecto9x1
    :incorrecto9x1
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x1
    :correcto9x1
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x2
    color 0a
    echo.
    set/p producto= 9 x 2 =
    cls
    echo.
    if %producto%==18 goto correcto9x2 else goto incorrecto9x2
    :incorrecto9x2
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x2
    :correcto9x2
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x3
    color 0a
    echo.
    set/p producto= 9 x 3 =
    cls
    echo.
    if %producto%==27 goto correcto9x3 else goto incorrecto9x3
    :incorrecto9x3
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x3
    :correcto9x3
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x4
    color 0a
    echo.
    set/p producto= 9 x 4 =
    cls
    echo.
    if %producto%==36 goto correcto9x4 else goto incorrecto9x4
    :incorrecto9x4
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x4
    :correcto9x4
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x5
    color 0a
    echo.
    set/p producto= 9 x 5 =
    cls
    echo.
    if %producto%==45 goto correcto9x5 else goto incorrecto9x5
    :incorrecto9x5
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x5
    :correcto9x5
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x6
    color 0a
    echo.
    set/p producto= 9 x 6 =
    cls
    echo.
    if %producto%==54 goto correcto9x6 else goto incorrecto9x6
    :incorrecto9x6
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x6
    :correcto9x6
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x7
    color 0a
    echo.
    set/p producto= 9 x 7 =
    cls
    echo.
    if %producto%==63 goto correcto9x7 else goto incorrecto9x7
    :incorrecto9x7
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x7
    :correcto9x7
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x8
    color 0a
    echo.
    set/p producto= 9 x 8 =
    cls
    echo.
    if %producto%==72 goto correcto9x8 else goto incorrecto9x8
    :incorrecto9x8
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x8
    :correcto9x8
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x9
    color 0a
    echo.
    set/p producto= 9 x 9 =
    cls
    echo.
    if %producto%==81 goto correcto9x9 else goto incorrecto9x9
    :incorrecto9x9
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x9
    :correcto9x9
    color 0a
    echo.
    echo MUY BIEN!!
    :inicio9x10
    color 0a
    echo.
    set/p producto= 9 x 10 =
    cls
    echo.
    if %producto%==90 goto correcto9x10 else goto incorrecto9x10
    :incorrecto9x10
    color c0
    echo.
    echo INCORRECTO!!
    echo.
    echo Vuelve a intentarlo
    pause
    cls
    goto inicio9x10
    :correcto9x10
    color 0a
    echo.
    echo  *********** COMPLETASTE LA TABLA DEL 9 ***********
    echo.
    echo              DIOS TE BENDIGA %nombre%...... 
    echo.
    echo.
    set /p caso= Para continuar teclea (SI),para salir teclea cualquier letra: 
    if %caso% == si (goto :Menu) else (goto :salir)
    :salir
    exit
    • Hola jzaldivarleyva,

      Gracias por tomarte el tiempo de publicar tu trabajo aquí, es una muy buena iniciativa y además tiene funcionalidad real tu programa. Enhorabuena.

      En el siguiente comentario intentaré darte algunos trucos para hacerlo más corto.

      ¡Saludos!

  42. hermanos tengo problemas con las rutas para direccionar archivos en batch, pues saben q como son muy largas el cmd se pierde y te dice archivo no encontrado…
    ejemplo D:\CONOCIMIENTO\CURSOS\INFORMATICA 2017 (VOL1)\archivo.txt
    como trato los nombres largos espacios etc para q cmd no se pierda.Que hago ???

    Bendicioness

    • Hola,

      En principio no deberia haber problema por que sean muy largos (hay excepciones, por ejemplo en windows xp hay un fallo del sistema referente a eso…).

      Quizás el problema que tienes es por los espacios. Al haber un espacio en la ruta, batch interpreta que son dos comandos diferentes en lugar de uno.

      Para solucionar eso debes poner las rutas que tengan espacio entre comillas dobles.

      Ejemplo:

      cd "C:\mi ruta con\espacios"
  43. Gracias hermano voy a poner en practica eso, por otra parte cuando le echamos mano paralelamente al lenguaje bash para el kali d linux ubuntu ect. responde cuando puedas.
    dios t bendiga

    • Hola, 88888888.

      En Linux (otro sistema operativo) es muy fácil instalar un programa directamente desde la consola, pero en windows no hay esta posibilidad.

      Lo que puedes hacer es descargar manualmente un programa llamado wget y luego usarlo para decargar otros programas. El problema es que la mayor parte de aplicaciones en windows estan pensadas para instalarse de forma gráfica, así que tendrás igualmente que darle a siguiente, siguiente…

      Enlace de descarga Wget: http://gnuwin32.sourceforge.net/packages/wget.htm

  44. Hermano ayudame en mi aplicacion TABLAS, tengo un problema:
    cuando el usuario no entra el resultado de un producto y lo q teclea es un espacio o simplemente teclea ENTER se me cierra la aplicacion es como si cracheara.En fin es un tratamiento contra errores lo q quiero hacer, revisa cuando puedasel codigo funete y ayudame.bendiciones

    • Hola jzaldivarleyva,

      Es una pregunta muy interesante. Si te fijas si insertas una letra por ejemplo no falla, únicamente ocurre con el espacio. Esto se debe a la forma en que batch sustituye las variables en el programa y ejecuta el código.

      Fíjate por un momento en esta comparación:
      if %producto%==0 goto correcto1x0 else goto incorrecto1x0

      Si sustituimos %producto por un espacio nos queda lo siguiente:
      if ==0 goto correcto1x0 else goto incorrecto1x0

      Esto obviamente da un error, por que falta uno de los operandos. Para solucionar esto hay diferentes técnicas, pero muchas veces lo que se suele hacer es añadir una «x» a la comparación:
      if x%producto%==x0 goto correcto1x0 else goto incorrecto1x0

      Ahora si sustituimos %producto% por un espacio obtenemos lo siguiente:
      if x==x0 goto correcto1x0 else goto incorrecto1x0

      Lo cual está bien sintácticamente. Si por el contrario ponemos el resultado correcto (un 0) obtendríamos lo siguiente:
      if x0==x0 goto correcto1x0 else goto incorrecto1x0

      Y nuevamente es correcto sintácticamente.

      Espero que te haya ayudado 😉

      Saludos

  45. hola…soy nueva y recien estoy llevando bat…pliss me podrias explicar como puedo hacer parahacer una calculadora completa ya se lo principal pero el problema es como hago el logaritmo….y ME ENCANTA TU BLOG XD

    • Hola Jeni,

      No hay forma de hacer logaritmos con batch, lo que puedes hacer es programarlo tu misma, o llamar a un programa externo que haga el cálculo y devuelva el resultado.

      Para calcular el logaritmo tu misma, hay diversas técnicas pero todas ellas implican conceptos matemáticos relativamente complejos. Si quieres puedes bucar información sobre series de Taylor (https://es.wikipedia.org/wiki/Serie_de_Taylor) pero como introducción a batch recomiendo que no te metas en eso.

      Saludos

  46. buenas consulta
    tengo que guardar en una agenda ciertos datos pero no puedo hacer que verifique el numero de telefono o sea que no me guarde un una persona que ya esta registrado en la agenda que me salga error o vuelva a empezar ya me doy x vencida
    y la otra es que no entendi bien como modificar y que sea el nombre apellido y telefono de la misma persona

  47. buenas
    lo que tengo hecho es lo siguiente

    :alta
    cls
    set /p nombre=Nombre:
    set /p apellido=Apellido:
    set /p c.i=C.I.:

    if %c.i% equ 9.999.999-9 (goto error2) else (goto conti1)

    :conti1
    echo Nombre: %nombre% Apellido: %apellido% C.I.: %c.i% >> %userprofile%\ITS.txt

    cls
    echo Esta Seguro que Desea darlo de alta
    type %userprofile%\ITS\Alumnos.txt | find /i «%c.i%»
    echo Si (S) o No (N)
    set /p res1=

    lo que tengo que hacer es antes de guardar es que revise si la c.i ya esta guardada y que no la guarde o me de un aviso.

    lo otro que tengo que hacer, que eso no lo hice xq no tengo idea como es, es modificar la información o los datos que tengo guardado pero la condición es la siguiente:
    yo busco la c.i y me aparece nombre apellido y c.i que están guardados, en base a eso preguntar que quiero modificar y después que lo guarde
    ahora yo vi lo que escribió y subió el compañero pero no entiendo el comando en si si me puedes explicar

    • Por lo que veo estás guardando en el fichero ITS.txt los datos con este formato:

      Nombre: John Apellido: Smith C.I.: xxxxxxx
      Nombre: Alan Apellido: Turing C.I.: xxxxxxx

      Este formato, hace que sea complicado manejar el fichero. ¿Se puede cambiar?

      Por ejemplo, sería más simple si lo guardas como hace Rubens separado por dos puntos o por punto y coma es más sencillo, por ejemplo:
      John:Smith:xxxxxxx
      Alan:Turing:xxxxxxx

      Si está almacenado así puedes recorrer el fichero y comprobar si existe un determinado c.i. así:

      set cicomprobar=xxxxx
      for /f “tokens=1-4 delims=:” %%i in (ITS.txt) do (
        set linea=%%i:%%j:%%k:%%l
        If %%l == %cicomprobar% goto yaexiste
      )
      goto noexiste
      
      • Buenas
        ese es el problema no se puede cambiar tiene que ser tal cual pero ahora que tengo esa base lo voy a intentar denuevo y ver si lo puedo hacer muchas gracias

  48. Hola, como están todos.

    Mi problema es el siguiente, estoy realizando un bat para respaldar el host, lo que requiero (que no he encontrado como) es que cuando se me olvide deshabilitar el antivirus (o en algún otro caso) y me salga el texto “Acceso denegado” me arroje una advertencia que diga por ejemplo “no se te olvide ejecutar como administrador y deshabilitar el antivirus” el código que estoy usando para el respaldo es el siguiente:

    @echo off
    copy %WINDIR%\system32\drivers\etc\hosts %WINDIR%\system32\drivers\etc\hosts.txt

  49. Hermano gracias, cencillamente correcto.Ahora necesito por favor codigo para darle a TABLA.BAT tamaño d la ventana q yo quiera.Hablo de las dimenciones d la ventana q abre el cmd para darle belleza a la aplcacion, gracias y esperando.bendiciones…

  50. Hola Amigo! A pesar de estar empezando con HTML y CSS me sigue encantando este programa por lo secillo que es (al menos de lo que se de batch, que no es mucho)

    Tengo una pregunta… Si quiero que alguien para una suma, ponga un número, como puedo hacer para que solo puedas poner un número, no una letra o un signo. Hasta el momento si pones una palabra lo que pasa es que pasa de «diapositiva».

    Explicandome mejor, en el if %numero_suma%==(cualquier número) goto respuesta_suma

    Pregunta aparte; En el foro, dentro de programacíon lo que podemos hacerlo es dividirlo por lenguages (ej: JAVA, Java Script, Html…) Si te parece bien, lo creo y pongo mis preguntas ahi 😉

    Muchas gracias!

    • Hola,

      Perdona la tardanza, estos días tengo mucho mucho trabajo y no estoy pudiendo atender mucho por aquí.

      La mayor parte de lenguajes de programación tienen lo que se llaman «tipos» de alguna forma, es decir una variable puede ser entera, decimal, un string, etc. pero en batch, todo es texto.

      Para comprobar si una variable es un número puedes usar el comando «set \a» por que este comando solo admite numeros, si no le pasas un numero dará 0. Por ejemplo:

      numero=3
      letra=p

      set/a test=%numero%
      (test es igual a 3)

      set/a test=%letra%
      (test es igual a 0)

      Por lo tanto simplemente tienes que hacer esto y comprobar que sea distinto de 0, pero ten en cuenta que si la variable inicial era un 0 si es válida, así que tendrás que comprobarlo con un if primero.

      if %numero% == 0 echo Es un numero
      set/a test=%numero%
      if %test% NEQ 0 echo Es un numero

      Saludos

  51. Hola buenas noches, se puede hacer algo para obtener el dia de la semana? es para armar unas bat para copias, ej, si es LUNES tal cosa, si es MARTES tal cosa… etc.
    Mucha ayuda brindas!

    • Hola,

      Es un poco complicado debido a que depende de la «localización» del ordenador, eso se debe a que en cada idioma los días de la semana se llaman diferente y además dependiendo del lugar del mundo el primer día de la semana es el domingo o el lunes…

      Si haces «echo %date%» algunos ordenadores van a devolver, entre otras cosas el día de la semana. Si es así puedes obtenerlo de ahi, pero si no, tendrás que hacer algo así:

      wmic path win32_localtime get dayofweek

      Esto te dará un numero del 0 a 6 donde 0 es siempre el domingo, 1 el lunes, etc…

      Saludos

  52. Perfecto hermano q bien muchas gracias. Ahora necesito posicion en la pantalla al abrir la aplicacion o sea en el centro,arriba, extremo superior derecho etc….y algo mas como puedo desactivar o desabilitar las notificaciones de windows10 del centro d actividades desde el cmd. gracias dios t bendiga.

  53. Hola, qué tal? necesitaría de tu ayuda. Me dejaron el siguiente ejercicio:
    Escriba un script que pida al usuario ingresar un número, en un bucle, hasta que el usuario ingrese 5.

    • Hola María,

      Enséñanos que tienes por ahora. No debería ser muy complicado de conseguir a ver si te podemos ayudar un poco 😉

      Tienes que usar un bucle o puedes hacerlo con un goto?

      En este tutorial no se explican los bucles, pero con «goto» deberías ser capaz de hacerlo sin problemas, inténtalo y te echamos un cable.

      Saludos

  54. Hola es muy bueno esta pagina, se puede hacer un programa con opcion a ingresar 10 horas y que cada vez que coincida la hora suene una alerta y tenga la opcion de volverle a poner otra fecha y asi sucesvamente.y al final que me lo muestra en un archivo de texto

  55. hola amigo y demas hermanos de este tutorial basico, como ya has dicho estas muy ocupado.de todas formas espero q estes bien ya se como resolver lo de desabilitar el centro de actividades y sus notificaciones y es creando esta clave en el registro y es vailido para vista,w7,w8,w10:REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer /v DisableNotificacionCenter /t REG_DWORD /d «1» /f. se crea si el regedit no la tiene funciona d maravilla. ahi esta a quien pueda interesarle, ya solo necesito saber mi otra interrogante, q dios los bendiga.

    • Hola,

      Genial, gracias por publicarlo!

      Para mover la ventana de terminal, por desgracia hay que usar un programa externo. El mejor que conozco es cmdow, tiene muchas más opciones que esta.

      Puedes descargarlo desde aquí: https://ritchielawrence.github.io/cmdow/

      El archivo ejecutable del programa en si está en la carpeta bin y puedes ejecutarlo con el siguiente comando:

      cmdow @ /mov 10 10

      El cmd con el que estás trabajando debe estar en la misma ruta que el programa cmdow. Para ver en que ruta está actualmente puedes usar el comando «dir» y para moverte a la ruta donde está cmdow puedes usar: cd C:\ruta\del\programa

      Por último mencionar que la arroba (@) en el comando hace referencia a la ventana actual. Puede moverse cualquier ventana disponible en el sistema sustituyendo la @ por el título de ventana entre comillas. Por ejemplo: cmdow «chrome – Todohacker…» /mov 120 80

      Saludos

  56. @echo off
    echo.
    set/p numero1= Dime un numero
    cls
    echo.
    set/p numero2= Dime otro para sumar al anterior
    cls
    set/a suma= %numero1% + %numero2%
    echo.
    echo %numero1% + %numero2% = %suma%
    echo.
    echo Pulsa una tecla para salir.
    pause>nul
    exit
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    echo.
    set/p numero1= Dime un numero
    cls
    echo.
    set/p numero2= Dime otro para sumar al anterior
    cls
    set/a suma= %numero1% + %numero2%
    echo.
    echo %numero1% + %numero2% = %suma%
    echo.
    echo Pulsa una tecla para salir.
    pause>nul
    exit
    

    Mi problema es que no lo pongo tan como esta en el ejemplo y siempre me pone «falta un operador»
    Saludos y gracias de antemano

  57. Buenas una ayuda estoy tratando de realizar un bat donde en el bat solicite un Digito y con ese numero busque en un txt el numero digitado donde me traiga la informacion que esta al frente ejemplo en el .vat ingrese codigo de oficina y en el txt esta oficina 3137 192.35.46.5 ya que se necesita para hacer ping

    • Hola Juancho,

      Puedes hacer algo así:

      @echo off
      for /F "delims=" %%a in ('findstr /I "NUMERO" Archivo.txt') do set texto=%%a
      echo %texto%
      pause

      Eso busca «numero» en archivo.txt y escribe toda la linea. Modificandolo un poco puedes conseguir la IP en tu caso.

      Saludos

  58. dios t bendiga amigo: necestito saber si puedo en lenguaje batch conectarme a una base de datos de access (hecha por mi). O sea utlizar las ventanas cmd como formularios es mas como aplicacion francamente y llenar la base de datos introduciendo datos con dichas ventanas cmd. espero puedas responder rapido.gracias

    • Hola,

      Desde batch no hay forma de conectarte con Access. Access es un programa privativo que supongo tendrá sus propias herramientas que quizás puedas ejecutar desde terminal. Pero en este caso no te puedo ayudar por que no uso Access y lo desaconsejo casi siempre.

      Saludos

  59. ok hermano. comprendido. me puedes decir como logro simular o hacer en batch el efecto de la barra de progreso de instalacion de un programas. imagino sepas de que te hablo . como cuando instalamos cosas por cmd. bendiciones

    • Hola,

      Lo que puedes hacer es utilizar los caracteres: ± y Û para sumular una barra. Pruebalos, el primero forma una barra vacía y el segundo una barra llena, usando parte de unos y otros puedes generar la barra en el momento que desees.

      Esto por ejemplo es una barra medio llena:
      ÛÛÛÛÛÛÛÛÛÛÛÛ±±±±±±±±±±±

      Puedes verlo funcionando en este video:
      https://www.youtube.com/watch?v=Ekr5U21yVGQ

      En la descripción tienes el código que utiliza.

      Ten en cuenta que tienes que borrar y reescribir toda la pantalla cada vez que actualices la barra.

      Saludos

  60. hola amigo ,muchas gracias ,por el tutoliar.le pido de favor me ayude en esta duda ,tengo una maquina industrial que el disco duro no arrancaba,logre hacerlo y pase informacion a otro disco .Luego instale en este disco en otra maquina el ms dos que es el que tenia .La cuestion es que quiero volver a poner este disco en la maquina u ordenador que estaba ,instalarle el msdos nuevamente ,copiarle todos los archivos que tengo guardo ,el tiene un programa que gobierna tres servomotores .me pregunta es posible lograra esto. Es decir intalar otra vez el ms dos en la maquina donde estaba este disco copiarle las carpetas que tenia y funcionara ,fundamentalmente abrira el programa de control de lo servos .Muy agraddecido por su atencion .Espero su ayuda

    • Hola Ramon,

      Está complicado, por lo que dices es un sistema muy antiguo, imagino que el ordenador se comunicará con un bus paralelo o serie con la placa controladora de los servos. Si tienes posibilidad de acceder a los datos del disco antiguo, lo más seguro es que clones por completo el disco para que quede todo igual configurado.

      Instalar de 0 un MS-DOS y hacerlo funcionar con el programa y configuración que tenia anteriormente me parece un reto bastante grande. Dependiendo de como de complejo sea el sistema puede funcionar directamente o quizas tengas que hazer alguna configuración más complicada.

      Si no tienes una opción mejor intentalo por que no pierdes nada, pero puede funcionar o no… no es sencillo.

      Saludos

  61. Hola, necesito generar archivos .bat que al ejecutarlos escriban letras sobre la aplicación que ya estuviera ejecutándose. Como para ejecutar macros en los juegos, algo así ¿me explico? Lo que quiero es poder tener esos .bat en una pantalla tactil y poder lanzarlos sobre la aplicación que se esté ejecutando.
    ¿Es esto posible? Más arriba he visto una consulta de cómo pulsar teclas, F4 por ejemplo decían, pero la verdad es que no me queda nada claro… y lo he probado y trasteado, pero no me escribe sobre la aplicación que esté ejecutándose 🙁
    ¿Me puede echar una mano? mil gracias!

    • Hola,

      La respuesta que te puedo dar es la misma a la que haces referencia del comentario sobre F4. Con bat directamente no se puede hacer, pero puede llamar a traves de scripts a utilidades del sistema que te permiten hacerlo.

      Aquí tienes el enlace donde explican como hacerlo: https://stackoverflow.com/questions/17038282/press-keyboard-keys-using-a-batch-file

      y te pongo aquí un código en batch un poco más refinado para lo que quieres hacer tu para que puedas entenderlo mejor:

      @if (@CodeSection == @Batch) @then
      @echo off
      set SendKeys=CScript //nologo //E:JScript "%~F0"
      echo Selecciona la ventana a la que quieras mandar las teclas!
      ping -n 3 -w 1 127.0.0.1 > NUL
      echo 3
      ping -n 3 -w 1 127.0.0.1 > NUL
      echo 2
      ping -n 3 -w 1 127.0.0.1 > NUL
      echo 1
      ping -n 3 -w 1 127.0.0.1 > NUL
      echo Enviando teclas...
      ping -n 1 -w 1 127.0.0.1 > NUL
      
      %SendKeys% "AAABBBCC"
      pause
      goto :EOF
      @end
      
      // JScript section
      
      var WshShell = WScript.CreateObject("WScript.Shell");
      WshShell.SendKeys(WScript.Arguments(0));
      

      Lo que hace es mostrar una cuenta atrás para que te de tiempo a seleccionar la ventana correcta y después envía la secuencia de teclas: AAABBBCC

      Saludos

    • Hola Adrián,

      Si te refieres a desactivar el teclado y raton del ordendor en general, no hay forma de hacerlo en bat. Lo que si puedes hacer desde bat es modificar el registro del sistema para que el teclado o el raton dejen de funcionar, pero no es nada recomendable hacer esto. Cualquier error y puedes corromper tu sistema operativo…

      No entiendo la parte del examen, ¿te piden hacer esto en un examen? :O

      Saludos

  62. Amigo no por la pregunta de Adrian, pero me pico la curiosidad lo de desactivar el mouse y teclado cambiando la clave del registro. Asumo son total madures y solo con fines educativos esa informacion y asumo lo que le suceda a mi ordenador. por favor dime como se puede hacer eso que dijiste. solo dime la ruta del reg.bendiciones

  63. Saludos! muy interesante toda la informacion aca planteada. Ahora te expongo mi problema… tengo una pc («mural») en red donde se muestra constantemente una presentacion de power point, dicha presentacion se actualiza cada cierto tiempo manualmente desde otra pc («editor») dado que esta en una carpeta compartida, pero para que se vean los cambios en la pc «mural» por asi decirlo hay que ir hasta donde esta ese equipo, cerrar la presentacion y volverla a abrir, he conseguido como matar el proceso de powerpoint con un bat desde el equipo «editor» pero no logro volver a abrir la presentacion a traves de la red. Podrian ayudarme a como usar el comando START (o el que sea necesario) para que esta presentacion vuelva a abrirse pero en el equipo «mural» no en el editor….

    • Hola Edgar,

      La primera pregunta que me surge es por qué hacer lo que pretendes con power point? Un programa de presentaciones no parece para nada adecuado para eso, y menos power point…

      Se me ocurre la posibilidad de tener un programa que cierre y vuelva a abrir el programa cada x tiempo, pero ejecutar algo en remoto solo con una carpeta compartida no es posible sin hacer algo sucio cómo escanear la carpeta en busca de cambios…

      Saludos

  64. hola que tal, ¿ existe algun comando para abrir una aplicación(ejem. una pagina web)y que la muestre en un determinado monitor cuando esta n conectados 3?

    • Hola Jorge,

      ¿Has probado a poner a URL entre comillas en el comando? esa URL tiene varios caracteres que son interpretados por la terminal y que por lo tanto no va a tener en cuenta wget.

      Saludos

  65. Excelente, había probado entre comillas las partes source, domain, product, date y hour, pero no todo el url como ahora que se ejecutó correctamente

    Mil gracias mi amigo 4m1g0

    Saludos

  66. Hola amigo un gusto saludarte.
    Estoy aprendiendo mucho en tu pagina. Gracias por compartir tus conocimientos.

    Sabes necesito de tu ayuda.
    Estoy queriendo abrir varios archivos pdfs a la vez desde cmd.

    Intenté poner el siguiente comando

    start prueba.pdf

    me abre el archivo .pdf pero quiero que a la vez me abra todos los archivos que tengo puesto en esa carpeta.

    Espero que me pueda ayudar amigo.

    Saludos.

    Abel.

    • Hola Abel,

      Puedes poner muchos start uno detras de otro así:
      start 1.pdf
      start 2.pdf

      Si lo que quieres es automaticamente abrir todos los que haya sin saber el nombre de antemano tienes que hacer un bucle. Es un poco más avanzado pero te lo dejo por aqui, intenta entenderlo y si tienes dudas pregunta.

      for /r %%i in (*.pdf) do start %%i

      El comando for es para hacer un bucle y el parámetro r indica listar todos los archivos del directorio actual que terminen por .pdf y hace la acción indicada al final.

      Saludos

  67. Genial funciono!!

    Te cuento que le aumente la ruta donde estaba los archivos y me quedo asi:

    for /r D:\Abelino\proyecto %%i in (*.pdf) do start %%i

    Muchas gracias por tu ayuda.

    Eres un genio amigo.

    Saludos

  68. amigo buenas tardes. existirá la forma de ejecutar un script en este caso hecho en batch, antes de que se cierre sesión en windows sin utiizar el GPEDIT.MSC. podemos programar el seguimiento de una variable de entorno o proceso que nos indique que se cierra la seión y entonces se ejecuta el script por el batch que programemos. bendiciones.

      • Agradezco tu ayuda hermano pero necesito hacerlo por cmd. de todas formas si sabes hacerlo programando el comando externo SCHTASKS.exe ahi si me sirve. muchas gracias y responde si lo sabes hacer.bendiciones

  69. Buenas he estado aprendiendo mucho de tu tutorial, muchas gracias por tomarte el tiempo en explicarnos.
    Bueno mi pregunta es yo utilizo este batch:

    start C:\Users\Sistemas\Desktop\format\E.bat
    start C:\Users\Sistemas\Desktop\format\F.bat
    start C:\Users\Sistemas\Desktop\format\G.bat

    el continua así hasta la unidad X

    el batch que ejecuta es el siguiente:

    @echo off
    @echo #######################################
    @echo ##### INICIO DE FORMATO################
    @echo #######################################
    echo.

    format E: /Q /FS:NTFS /X /Y

    echo.
    echo.
    @echo #######################################
    @echo ##### FIN DE FORMATO ##############
    @echo #######################################
    echo.
    pause
    exit

    por cada unidad desde la E hasta la X, como esta claro el me abre una ventana de CMD por cada unidad, mi pregunta es como hago para que cuando una unidad o varias que no este no este en uso, me cierre esa ventana automáticamente, para que solo me deje abiertas las que están si están en uso. Se que seria con una variable y el if pero no sabría como implementarlo.

    Y por ultimo hay forma de realizar un batch para expulsar todas las unidades extraibles de forma segura?

    muchas gracias por tu ayuda.

  70. Hola una consulta hay alguna forma de generar un bat para iniciar un programa y que ingrese usuario y password que solicita para iniciar el programa encontre este ejemplo pero unicamente levanta el .exe sin efectuar la autenticacion

    @ECHO OFF

    CD C:\Program Files (x86)\Anviz\CrossChex Standard

    START CrossChex.exe /user:ADMIN /password:

    EXIT

    gracias por la ayuda.

    • Hola Mario,

      Puedes hacer que pida autenticación en la consola usando los comandos set/p vistos en el tutorial, pero eso no evitará que alguien abra el archivo .bat y vea que exe se está ejecutando y lo abra manualmente.

      Sería algo así:


      @echo off
      :inicio
      set/p pass=Clave de acceso:
      if %pass%==1234 goto fin
      echo Clave incorrecta
      goto inicio
      :fin
      echo Clave correcta
      echo Iniciando programa...
      start programa.exe

    • Hola,

      Siento que no haya respondido, últimamente tengo mucha carga de trabajo y casi no me queda tiempo.

      No tengo muy claro cual sería la solución para tu problema en Windows (en Linux sería mucho mas sencillo) tengo que investigarlo y hacer pruebas, pero no he tenido tiempo.

      A ver si alguien que lea por aquí sabe y puede darnos alguna pista.

      Saludos

  71. ok, hermano yo cuando te pido ayuda es que lo he intentado y no se hacerlo. te agradezco de todo corazon al igual que a yooimx. muchas gracias por tu tiempo seguro al final lo resolvemos. bendiciones.

  72. hola,queria decir que a veces parece que if no funciona.ej:
    set /p var=ponga un valor
    if %var%==1 goto 1
    if %var%==2 goto 2
    presiono 1 y me manda al 2.
    me fijo:el codigo todo bien
    mi computadora tiene un error o algo?
    gracias por su tiempo.

    • Hola,

      Programando hay que tener siempre en cuenta una cosa: Los ordenadores NUNCA se equivocan.

      Es decir que si algo no va como esperamos debemos asumir que o bien hemos cometido un error en algún lado, o bien algo que pensábamos que funcionaba de una manera en realidad funciona de otra forma.

      Esto siempre me ha ayudado a tener paciencia, analizar el código cuidadosamente y hacer pruebas y más pruebas hasta dar con los errores. Este tipo de cosas pasan a todos los niveles en informática.

      Con respecto a tu código recuerda que goto te lleva a donde hayas puesto la etiqueta con ese nombre, y también ten en cuenta que si no indicas lo contrario, la ejecución sigue linea a linea si no se cumplen las condiciones, por eso siempre hay que terminar los bloques con exit si no quieres que pase al siguiente bloque.

      Examina este ejemplo completo basado en tu código y seguro que encuentras el problema.

      @echo off
      set /p var=ponga un valor
      if %var%==1 goto 1
      if %var%==2 goto 2
      echo no has pulsado ni 1 ni 2
      pause
      exit
      
      :1
      echo has pulsado 1
      pause
      exit
      
      :2
      echo has pulsado 2
      pause
      exit
      

Webmenciones

  • Elimina los *.bak y *.log que crea el Autocad con Batch en Windows - Jonathan Macalupu 19 mayo, 2018

    […] Nota: Si quieren saber más sobre ello, existe un tutorial básico en todohacker.com y bueno, que puede ayudarnos a entender mejor la herramienta poderosa que Microsoft pone a nuestra disposición: https://todohacker.com/tutoriales/lenguaje-batch […]