PDA

Ver la versión completa : [TUTORIAL] Programacion en batch



darkguidoo
04/12/2008, 14:33
Buenas, aca les dejo una guia muy util de programacion en batch que use yo para aprender lo basico. Esta todo muy completo y sirve mucho.



1. Introducción
Las siglas BAT características de los guiones en entorno MSDOS provienen del hecho de que son procesos BATCH. En Msdos los nombres de los archivos podían tener hasta 8 letras para el nombre y tres letras para la extensión. Dado que solo se disponía de tres letras para identificar la clase de archivo se optó por poner BAT (aunque a partir de Windows 2000 también se puede usar CMD).

Los proceso batch son nativos de MVS/DOS y VSE/DOS que suelen funcionar con JCL. RPG es un lenguaje basado íntegramente en la metodología batch.

Desde entonces cada sistema operativo que ha salido ha incluído un sistema de scripting. Los grandes sistemas se quedaron con JCL/JOBS mientras que la aparición de UNIX, MINIX y demás empezaron a utilizar una shell diferente y mas interactiva con un espacio de consola para los usuarios y un lenguaje apropiado para administrar la estación (esto no era necesario en MVS o VSE porque el usuario actuaba sobre pantallas tontas 3270) Se llamó shell y se conoce habitualmente como sh. Posteriormente salieron otras entre las cuales está bourne shell again conocida como bash.

Microsoft hizo una para su sistema operativo que copió descaradamente de bash. Invirtió la barra para identificar el path correcto a un archivo y adaptó el lenguaje a un sistema operativo monousuario e incapaz de trabajar en red. Este es el lenguaje BAT. Con los años microsoft se ha visto obligado a modificarlo considerablemente (sobre todo los comandos de entorno de red) dadas las muchas limitaciones que tenía. Aún hoy es increíblemente pobre en comparación con las de otros sistemas operativos. El lenguaje bat es un complemento en windows y no una parte fundamental como en los demás.

Volver al menú

2. ¿Qué se puede hacer con ellos?
Pues se puede hacer de forma automatizada todo aquello que se pueda hacer en la consola de msdos. Se pueden ejecutar programas, enviar y recibir parámetros y automatizar tareas

Volver al menú

3. Creación de un programa.BAT

Pues son texto plano. Quiere eso decir que se pueden escribir en el block de notas, utilidad Edit de msdos o algún editor ascii.

Al guardarlos deben tener la notación de nombres propia de msdos. Esto es un nombre con máximo 8 letras (espacios y \ no permitidos), luego un punto y la extensión que en este caso es obligatoriamente BAT (para compatibilidad con todas las versiones windows) o CMD (a partir de Windows 2000).

Para crearlos desde la misma consola puedo utilizar varios sistemas

Mediante la orden COPY

copy con: nombre_de_archivo.b at Orden de creación de archivo con el nombre 'nombre_de_archivo.b at'
...
...
comandos órdenes a ejecutar
...
...
Ctrl + Z Fin y grabación del archivo en el directorio actual



Método 2 mediante la redirección

echo 1º línea a insertar >nombre_de_archivo.b at Se graba el fichero 'nombre_de_archivo.b at con la primera orden a ejecutar
echo restantes líneas >>nombre_de_archivo.b at Se añade la segunda orden
echo restantes líneas >>nombre_de_archivo.b at Se añade la tercera orden ...

En cualquier caso para modificarlos podemos utilizar la utilidad Edit de msdos (abriendo el archivo concreto y luego grabando los cambios) o el block de notas.

Volver al menú

4. Redirección de entrada/salida

Pues al igual que en unix se puede hacer que la salida de un comando sirva como entrada de otro. Cada proceso tiene ya predeterminados sus dispositivos de entrada y salida. Mediante la redirección podemos cambiar eso.

DISPOSITIVO SALIDA
CON Salida por la pantalla
PRN Salida por la impresora por defecto
LPT1 Salida por la 1º impresora en paralelo
COM1 Salida por el primer puerto serie
COM2 Salida por el segundo puerto serie

Así, si ejecuto la orden 'dir' la orden saldrá en su dispositivo por defecto (CON) y veré el resultado por pantalla

Para redireccionar se utilizan los operadores < y > que sirven para indicar que salida debe ir a que lugar

Por ejemplo si yo quiero redireccionar la salida estandar de dir para que en vez de ir a la pantalla vaya a la impresora haré

dir >prn

Con lo que la salida natural del comando DIR en vez de ir a su sitio natural (la pantalla) irá a la impresora por defecto.

Volver al menú

5. Filtros

Los filtros son órdenes que sirven para formatear la salida del comando de acuerdo a nuestros intereses. Se utilizan mediante la barra vertical (Alt 124).

El filtro SORT sirve para ordenar la salida

DIR | SORT

El filtro MORE sirve para pausar la salida cada pantalla para que pueda ver todos los datos de salida con tranquilidad. Pasa de pantalla a pantalla al pulsar una tecla.

DIR | MORE

6. Máscaras y comodines
Para seleccionar varios archivos a la hora de realizar una determinada operación existe la posibilidad de utilizar máscaras. Estas máscaras utilizan los caracteres comodines para describir que archivos deben verse afectados. Para ello y teniendo en cuenta que los nombres de los archivos deben cumplir la notación de msdos (8 letras sin espacios como máximo, luego un punto y tres letras como máximo de extensión) se pueden utilizar los llamados comodines.

* Equivale a varios caracteres
? equivale a un solo caracter.

Ejemplos

*.cfg seleccionar todos los archivos que tengan la extensión cfg
a*.cfg seleccionar todos los archivos que comienzen por a y tengan la extensión cfg
a*b.cfg seleccionar todos los archivos que comienzen por a, acaben por b y tengan la extensión cfg
*asa*.cfg seleccionar todos los archivos que contengan 'asa' y tengan la extensión cfg
c?asa.cfg seleccionar todos los archivos que contengan una C, luego un caracter cualquiera y luego 'asa'. Debe tener también la extensión cfg
c?b*.* seleccionar todos los archivos que empiezen por c, tengan un caracter cualquiera, luego una b y cualquier extensión
*.b?t seleccionar todos los archivos que tengan una extensión que empieze por b, luego un caracter cualquiera y luego una t.

Volver al menú

7. Trayectos (paths)

La trayectoria es el nombre completo de un archivo e indica la situación exacta de un archivo y su nombre.

leeme.txt el archivo se llama indico su nombre, pero nada mas. Se da por supuesto que se encuentra en el directorio actual.
c:\leeme.txt el archivo que me interesa se llama leeme.txt y se encuentra en el directorio raíz de C.

Dado que en msdos no se admiten nombres largos (mas de 8 letras) ni espacios, cuando quiero utilizar un nombre de windows en msdos debo saber que este será reconvertido a su nombre corto. Este se obtiene añadiendo los seis primeros carácteres válidos del nombre, luego el signo ~ (alt 126) y luego un número.

De esta forma un archivo que se encuentre en Mis documentos en win98 tendrá el path

c:\misdoc~1\leeme.txt

Y en Windows 2000/XP

c:\Docume~1\Usuario\misdoc~1\leeme.txt

También se pueden utilizar (mientras las comillas para delimitar el nombre

"c:\Mis Documentos\leeme.txt"

Esta sería la trayectoria de mimusica.mp3 (en Mis Documentos en Win 98)

c:\misdoc~1\mi~1\mimusica.mp3
Qué equivale a
"c:\Mis Documentos\Mi Música\mimusica.mp3"

Volver al menú

8. Unidades Lógicas
Siempre es una letra seguida del signo dos puntos.
A: = disquetera
B: = reservada para segunda disquetera
C: = primera partición (normalmente es la que arranca)
D: = segunda partición (generalmente el cdrom)
Por eso si se crea una unidad lógica mediante netbios en windows, esta puede tener un nombre msdos para poder acceder a ella desde la consola. La letra que se asigne no puede corresponder a una unidad lógica existente.

Volver al menú

9. Comandos MSDOS

Los comandos en msdos tienen las siguientes características:

a) el formato general es COMANDO [OPCIONES]

b) Da igual que se usen mayúsculas o minúsculas

c) Los argumentos y opciones se separan por espacios

Volver al menú

9.1 Comandos básicos de consola

9.1.1 CLS

Borra la pantalla

9.1.2 Echo [parámetros]

Tiene varias posibilidades:

ECHO sin parámetros saca el estado en que se encuentra la variable echo (on u off)
ECHO ON activa el echo (como en un terminal TTY) por lo que los comandos se verán en pantalla y luego su resultado
ECHO OFF desactiva el comando echo y ya se verán los resultados de la ejecución del comando, pero no el comando en sí mismo
ECHO LITERAL saca por pantalla el literal. Por eso al hacer echo literal >fichero.bat estamos redirigiendo la salida de echo literal (que tendría que salir por la pantalla) al archivo fichero.bat.
9.1.3 Pause [mensaje]

Sirve para sacar un mensaje y parar la ejecución hasta que se pulse una tecla

9.1.4 Prompt [parámetros]

Sirve para cambiar el prompt de msdos.

$p Mostrar el trayecto actual
$g Mostrar el separador >
$l Mostrar el separador <
$b Mostrar el separador |
$q Mostrar el separador =
$$ Mostrar el separador $
$t Mostrar la hora
$d Mostrar la fecha
$v Mostrar la versión del sistema
$n Mostrar la unidad actual
$h Retroceso. Borra el caracter previo
$e Escape. Muestra el caracter \
$_ Retorno de carro y salto de línea (equivale a chr 10 y chr 13 ascii

Por eso si ponemos prompt $p$g el cursor muestra la trayectoria donde estamos y luego el separador

Es posible añadir texto (por ejemplo prompt Mi_nombre $p$g

9.1.5 Date

Ver/poner la fecha del sistema

9.1.6 Time [hora]

Ver/poner hora del sistema

9.1.7 Ver

Versión del sistema

9.1.8 Vol [Unidad]

Volumen de la unidad especificada.

9.1.9 Path [trayecto]

Indica un trayecto por defecto si se produce una petición de un archivo que no está en el directorio actual.
Por eso en windows 98 suele haber una línea en autoexec.bat que es

path c:\windows; c:\windows\command que indica que si se solicita un ejecutable que no esté en el directorio actual, lo busque primero en la carpeta windows y luego en la subcarpeta command.

En Windows 2000 y XP no se utiliza autoexec.bat pero se existe una variable del sistema llamada PATH.

9.1.10 KEYB código_pais,juego_de_caracteres,definición_de_tecl ado,

El código de país de españa es el 'sp'
El juego de caracteres aplicable a españa es el 850 ó 437
El archivo de definición de teclado es keyboard.sys
Para configurar un teclado en español

keyb sp,,c:\windows\command\keyboard.sys

9.1.11 SYS [unidad]

Transfiere el sistema operativo msdos a la unidad especificada.

9.1.12 DOSKEY

Muestra los comando utiliados anteriormente al pulsar la tecla arriba del teclado.

9.1.13 MEM [parámetros]

Muestra la memoria usada y libre en el sistema

/p Muestra por programas
/d por programas y controladores
/c por tamaño

Volver al menú

9.2 Comandos de manejo de archivos

9.2.1 COPY [opciones] [origen] [destino]

Sirve para copiar archivos de un lugar a otro. el origen debe ser un trayecto completo de donde están los archivos a copiar. Si se omite se entiende que en el directorio actual.
El destino debe ser una trayectoria completa de donde dejar el/los archivo(s)

copy miarchivo.txt c:\ copiarlo al directorio raíz de C
copy miarchivo.txt c:\miarch.txt copiarlo y además cambiarle el nombre a miarch.tx
copy *.txt a:\ copiar todos los archivos que tengan la extensión txt a la unidad A
copy *.txt c:\misdoc~1 copiar todos los archivos que tengan la extensión txt al directorio Mis documentos (cuyo nombre corto es misdoc~1).

También se pueden concatenar archivos

copy archivo1.txt+archivo2.txt c:\archivo3.txt Unir archivo1.txt y archivo2.txt y dejarlo en archivo3.txt en C:\

Las opciones son

/A Tratar el archivo como un archivo ASCII
/B Tratar el archivo como un archivo binario
/D Permite que el archivo destino se grabe descifrado
/V Verifica la copia
/N Al copiar usa el nombre corto en vez del nombre largo
/Y Suprime la pregunta de confirmación si se va a sobreescribir algún archivo
/Z Copia archivos de red en modo reiniciable
/S Copia subdirectorios
/E Crea subdirectorios en el destino aunque los subdirectorios originales estén vacíos.

Se pueden guardar estos valores por omisión en la variable de entorno COPYCMD (solo a partir de Windows 2000).

9.2.2 DEL [opciones] [archivo]

Borra archivos

/P Pide confirmación en cada caso
/F Modo force. Borra incluso los archivos de solo lectura
/S Borra también los subdirectorios.
/Q Modo silencioso. No pide confirmación en ningún caso

9.2.3 MKDIR o MD [directorio]

Crear directorio

9.2.4 RMDIR o RD [directorio]

Borra un directorio. El directorio debe estar vacío

9.2.5 CHDIR o CD [path]

Cambia al directorio indicado.

CD "c:\archivos de programa" Trasladarse al directorio Archivos de programa
CD .. Trasladarse al directorio superior
CD \ Trasladarse al raíz

9.2.6 DIR [opciones][trayecto]

Saca una lista del contenido del directorio especificado en el trayecto. Si no se especifica nada, se entiende el actual.
Si se pone como parámetro /W saca un listado resumido.
Si se pone como parámetro /P saca un listado utilizando el filtro more.

9.2.7 ATTRIB [/S] [archivo]

Muestra los atributos de los archivos indicados y en su caso permite cambiarlos.

Con el parámetro /S busca también en subdirectorios.

Los atributos son:
H -> oculto. Se activa con +h y desactiva con -h
R -> Lectura. Solo lectura con +r, normal con -r
S -> Sistema. Se activa con +s y desactiva con -s
A -> Modificado. Para copias de seguridad incrementales. +a indica modificado y -a indica no modificado.

ATTRIB archivo.txt Muestra los atributos de ese archivo
ATTRIB -r archivo.txt Pone el atributo solo lectura a archivo.txt


Attrib miarchivo.txt (mostrar los atributos de miarchivo.txt)
attrib *.exe +r +r +s (pone a todos los archivos con extensión exe como ocultos, del sistema y read only)

9.2.8 RENAME o REN [Nombre_antiguo] [Nombre_nuevo]

Renombra un archivo.

Si se ponen múltiples archivos todos se renombran mediante la misma regla

REN *.txt *.bak Renombra todos los archivos TXT a BAK

9.2.9 TYPE fichero

Muestra el fichero. Se suele utilizar con el filtro MORE si se desea que se vea paginado

type archivo.txt | more

o bien con redirección a la impresora para imprimirlo

type archivo >prn

Volver al menú

9.3 Comandos de disco

9.3.1 Diskcopy [origen] [destino]

Copia un disquete completo de origen a destino

diskcopy a: a: copia un disquete de unidad A a la unidad A
diskcopy a: b: copia un disquete de unidad A a la unidad B

9.3.2 Fdisk [/mbr]

Utilidad para gestionar las particiones de un disco.

Con el parámetro /mbr se puede borrar el mbr (Master Boot Record) de un disco

9.3.3 Format [/s]

Formatear disquetes.

Con el parámetro /s se transfiere además el sistema operativo (válido para win98 y anteriores)

Con el parámetro /a se realiza un formateo rápido.

9.3.4 label [unidad][etiqueta]

Poner etiqueta a un volumen

label a: copia Poner etiqueta copia en el disquete
label c: DiscoDuro Poner etiqueta DiscoDuro al disco duro

9.3.5 Mscdex [/d:montaje]

Monta un cdrom o dvd ya configurado mediante un driver de dispositivo. El punto de montaje es el especificado en config.sys en el driver de dispositivo.

Válido en Win98 y anteriores

9.3.6 Scandisk [unidad] [/autofix] [/scanonly] [/surface]

Comprueba la integridad de un disco en Windows 98 y anteriores.

Con el parámetro autofix repara automáticamente los errores encontrados.

Con el parámetro scanonly solo comprueba el disco y muestra estadísticas

Con el parámetro Surface realiza una comprobación de superficio del disco

Volver al menú

9.4 Comandos de red

9.4.1 ARP [opciones]

Ver/Modificar la tabla de ARP.

arp -a Muestra la tabla de arp
apr -s IP mac Agrega una entrada a la tabla de arp

9.4.2 FTP

Cliente ftp de windows

9.4.3 IPCONFIG [Parámetros]

Mostrar los parámetros de conexión tcp/ip

ipconfig /all muestra toda la información de configuración
/release adaptador libera la ip del adaptador especificado
/renew adaptador renueva la ip para el adaptador especificado
/flushdns purga la caché de resolución de dns
/registerdns actualiza las conexiones dhcp y vuelve a registrar los nombres dns
/displaydns muestra el contenido de la cache de resolución dns

9.4.4 NBTSTAT [opciones]

Hace un estado de la red por netbios

nbtstat -a Lista la tabla de nombres por nombre
nbtstat -A Lista la tabla de nombres por IP
nbtstat -c Lista la caché nbt mostrando nombres y direcciones IP
nbtstat -n Lista los nombres netbios locales
nbtstat -r Lista de nombres resueltos por difusión y WINS
nbtstat -R Purgar y recargar la cache nbt
nbtstat -S Lista las sesiones con las IP de los destinos
nbtstat -s Lista las sesiones con los nombres de los destinos

9.4.5 Net [opciones]

Conmando para acceder a dominios, crear/quitar sesiones netbios, montar unidades netbios, ...

Algunos comandos también funcionan en win9X, pero a partir de Win2k se añadieron muchos parámetros nuevos.

Tiene muchas posibilidades y se usa siempre con parámetros. Los parámetros son:

Servicios
net start X Inicia el servicio X
net stop X Termna el servicio X
net config server Muestra/modifica servicios.
/hidden=yes/no indica si el servidor debe mostrarse en la lista de ordenadores. Se corresponde con el comando Samba 'browseable'
/autodisconnect:X minutos antes de que se desconecte un usuario del servidor
net pause X Detiene el servicio X
net continue X Reanuda el servicio X

Recursos
net view X /domain: Y mostrar dominios enteros o recursos en un equipo
/Domain: y -> muestra equipos en el dominio
X es el servidor que se desea ver (\\X)
net print impresora Permite ver/modificar la cola de impresión
/hold:x -> no imprimir el trabajo X
/release:x -> reanudar trabajo X
net share Mostrar/modificar recursos compartidos
net use nombre \\recurso Crear una conexión de red

Usuarios
net group x Añadir/ver/modificar grupos de usuarios en un dominio
/Domain:x -> nombre del dominio
/add x -> añadir un grupo nuevo
net user usuario clave Añadir/ver/modificar usuarios en un dominio
/domain:nombre -> nombre del dominio
/add x -> agregar usuario al dominio
Si en clave se pone * se indica ue hay que preguntar cada vez
/delete -> borrar usuario
net accounts Muestra/modifica la cuenta de un usuario
/minpwlen:x -> longitud mínima de password
uniquepw:x -> solo se puede usar la clave x veces. Luego hay que cambiar
/domain: nombre -> nombre del dominio
/sync -> sincronizar los cambios en los servidores BDC

Comunicaciones
net send x y Enviar mensaye Y a usuario/ordenador X
Si nombre es * se envía a todos los miembros del grupo/dominio
/domain: nombre -> nombre del dominio

9.4.6 Netstat [opciones]

Comando para comprobar el estado actual de la red

netstat -a Mostrar todos los puetos y conexiones
netstat -n Mostrar número de puerto y direcciones
netstat -r Mostrar la tabla de rutas
netstat -s Mostar estadísticas por protocolo
netstat -p tcp/udp Mostrar las conexiones activas TCP o UDP

9.4.7 Nslookup[opciones]

Utilidad para interrogar dns

9.4.8 Ping [opciones]

Enviar paquetes icmp a un determinado destino.

ping -t ping al host hasta que se pare
ping -a resolver direcciones en nombres de host
ping -n numero Número de peticiones a enviar
ping -l tamaño tamaño del buffer

9.4.9 Telnet [host] [puerto]

Inicia una sesión telnet al host especificado en el puerto especificado. Si el puerto se omite se usa el 23.

9.4.10 Tracert [destino]

Tracear el destino hasta llegar a la ruta indicada.

Volver al menú

9.5 Comandos de programación

9.5.1 Edit [archivo]

Editor de textos (equivalente al bloc de notas)

9.5.2 Debug [archivo] [opciones]

Inicia el desensamblador con el programa indicado.

9.5.3 choice [texto] [opciones]

Se utiliza en programas bat para dar a elegir a un usuario entre un conjunto de opciones
La respuesta se devuelve mediante la variable errorlevel
Mostrar el literal "elija una opción y dar a elegir s (sí), n (no) o C (continuar). las tres siguientes líneas especifican a donde debe saltar el flujo del programa según la tecla pulsada.

choice Elija una opción snc
Mostrar el texto y las opciones (S, N, C)
if errorlevel 1 goto ... si se ha pulsado S
if errorlevel 2 goto ... si se ha pulsado N
if errorlevel 3 goto ... si se ha pulsado C

9.5.4 If [condicion] [comando]

Sirve para hacer bifurcaciones en el código.
Admite 6 sintaxis distintas:


if exist fichero orden si existe 'fichero' ejecutar la orden
if not exist fichero si no existe fichero ejecuar la orden
if cadena1==cadena2 orden comparar cadena1 y cadena2
if not cadena1 == cadena2 orden si son distintos
if errorlevel numero orden si el comando anterior acabó con un errorlevel igual o superior a numero ejecutar orden
if not errorleven numero orden si el comando anterior acabó con un errorlevel inferior a numero ejecutar orden

9.5.4 for

El formato general es

for %%variable in lista do ( orden 1
orden 2
orden 3
)

La variable siempre lleva dos veces el signo %

Ejemplo

FOR %%x IN (texto1.txt texto2.txt texto3.txt) do delete %%i

Esta orden haría lo siguiente: repetiría 3 veces la orden delete. En cada vez %%i valdría cada valor de la lista de manera que la primera vez sería texto1.txt, la segunda vez texto2.txt y la tercera vez texto3.txt.

Así esta orden haría:
DELETE TEXTO1.TXT
DELETE TEXTO2.TXT
DELETE TEXTO3.TXT

Volver al menú

10 Variables de entorno

set variable=valor Declarar una variable de tipo string y le da un valor
SET /n variable = valor1 + valor2 + valor3 Declara una variable de tipo numérico cuyo valor es la suma de valor1+valor2+valor3

También hay algunas variables que ya vienen declaradas como la variable PATH, OS, por ejemplo. Estas variables que ya vienen declaradas puedes verlas en propiedades de mi pc, avanzado, variables de entorno y están a tu disposición en ficheros por lotes (bat)

Para referirte a cualquiera de estas variables las pones entre los signos %
Así para saber saber si tu sistema operativo es win98 haces

IF %os% == WINDOWS98 ECHO ES WINDOWS 98

Volver al menú

11. Etiquetas

Se pueden definir etiquetas que se utilizarán para saltar a ellas cuando se cumpla una condición. Para definir una etiqueta pones una línea que empiece por : y luego el nombre de la etiqueta
Por ejemplo:

ORDEN 1

ORDEN 2

if %os% == Winnt goto winnt Si el sistema operativo es NT ir a etiqueta winnt
ORDEN 3 esta línea se ejecuta si no es winnt
goto fin
:winnt etiqueta
ORDEN 4 esta línea se ejecuta si es NT
:fin etiqueta

Volver al menú

12. Parámetros reemplazables
A menudo en este tipo de archivos tu quieres poder pasarle parámetros. Estos parámetros sirven para que el script haga una cosa u otra en función del parámetro que le pasas. Por ejemplo si tienes un archivo bat cuyo nombre es AVERIGUARSISTEMAOPE RATIVO.BAT tu puedes hacer lo siguiente:
AVERIGUARSISTEMAOPE RATIVO windows98
AVERIGUARSISTEMAOPE RATIVO win2000
AVERIGUARSISTEMAOPE RATIVO winxp

En los tres casos llamas al mismo script AVERIGUARSISTEMAOPE RATIVO, pero en cada caso le pasas un parámetro diferente. En el primero le pasas windows98, en el segundo le pasas win2000 y en el tercero le pasas winxp.

Para referirte al parámetro en el código debes saber que el sistema les asigna nombre de forma automática. Ál primero le llama %1, al segundo %2, al tercero %3, ..., al mil %1000

Así yo podría tener un archivo bat llamado AVERIGUARSISTEMAOPE RATIVO.BAT que me confirma si mi sistema operativo es el que yo creo.
Su código sería:

if %os%==%1 goto correcto si el sistema operativo (%os%) es igual al primer parámetro (%1) ir a etiqueta correcto
echo el sistema operativo NO es %1 poner el mensaje de que no es
goto fin
:correcto etiqueta
echo el sistema operativo SI es %1 poner el mensaje de que si es
:fin

Volver al menú

13. Acceso al registro

13.1 Reg [operacion] [parametros]

Operacion puede ser

REG QUERY clave [/v nvalor | /ve] [/s] #Consultar una clave o subclave
Clave = \equipo\lclave #si se omite equipo se usa el equipo local. En equipos remotos solo disponibles HKLM y HKU
/v = consulta para una clave de registro específica
/ve = consulta el valor predeterminado
/s = consultar todos los valores/subclaves
SAVE SAVE clave archivo #guarda en un archivo un arbol del registro.
Clave=ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
SubClave=nombre completo de la subclave
Archivo = Nombre del archivo para guardar
COMPARE clave1 clave2 [/v valor | /ve] #compara dos subclaves o árboles de registro
Clave = \\equipo\ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
Valor = nombre del valor para comparar en la clave seleccionada (si se omite se comparan todos)
/ve = Comparar el nombre de valor vacío
/s = comparar todas las subclaves y valores
salida [/oa | od | os | on] #oa=devuelve todas las coincidencias y diferencias, od=solo diferencias, os=solo coincidencias, on=nada
ADD Clave [/v nvalor | /ve] [/t tipo] [/s separador] [/d datos] #agregar una subclave al registro
Clave = \\equipo\ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
/v = Nombre del valor a agregar
/ve = agrega el valor vacío (sin nombre)
/t = REG_SZ, REG_MULTI_SZ, REG_DWORD_BIG_ENDIA N, REG_DWORD, REG_BINARY, REG_DWORD_LITTLE_EN DIAN, REG_NONE, REG_EXPAND_SZ (si se omite se asume REG_SZ)
/s = caracter. (si se omite se asume \0)
/d = datos que se agregan al valor a insertar
/f = fuerza la sobreescritura sin avisar
LOAD clave archivo #carga un archivo en un árbol
Clave =ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU (solo para equipo local)
Archivo: creado con reg save
EXPORT clave archivo # exportar subclaves y valores
Clave =ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
Archivo: archivo donde exportar
DELETE clave [/v nvalor | ve] [/va] [/f] #borrar un arbol del registro
Clave =ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
nvalor: nombre de valor a borrar. Si se omite se borrarán todas las subclaves y valores
/ve elimina el valor de un nombre de valor vacío
/va elimina todos los valores en la clave actual
/f fuerza la eliminación sin avisar
UNLOAD clave #descargar un arbol del registro
Clave =ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU (solo para equipo local)
IMPORT archivo Importa un arbol al registro. El archivo debe haber sido creado con export
archivo = archivo.reg (solo equipo local)
COPY clave1 clave2 [/s] [/f] #copia una clave en el registro
Clave =ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
/s = copia todas las subclaves y valores
/f = fuerza la copia sin avisar
RESTORE clave archivo
Clave =ClaveRaiz\SubClave ClaveRaiz=HKLM, HKCU, HKCR, HKU, HKCC
Archivo: Nombre del archivo a restaurar Este archivo debe haber sido creado con reg save

Ejemplos

Mostrar el valor de versión del registro

reg query HKLM\Software\Microsoft\Rest /v Version

Mostrar todas las subclaves y valores en la clave de registro Setup

reg query HKLM\Software\Microsoft\Rest\Setup /s

Guardar el subarbol MiAp en el archivo CopiAp.hiv en la carpeta actual

reg save hklm\Software\Mico\MiAp CopiaAp.hiv

Comparar los valores de MiAp con los de GuardaMiAp

reg compare khlm\softare\Mico\Miap HKLM\Software\Mico\GuardaMiAp

Agregar una clave Mico en el equipo remoto ABC

reg add \\abc\HKLM\Software\Mico

Agregar un valor 'datos' de tipo REG_BINARY y contenido 'fe340ead'

reg add HKLM\Software\Mico /v datos /t REG_BINARY /d fe340ead

Cargar el archivo CopiaAp.hiv en MiAp

reg load hklm\Software\Mico\MiAp CopiaAp.hiv

Exportar todas las subclaves de la clave MiAp a CopiaAp.REG

reg export HKLM\Software\Mico\MiAp CopiaAp.reg

Eliminar el contenido de TIMEOUT y todas sus subclaves y valores

reg delete hklm\Software\Mico\MiAlp\Timeout

Descargar el arbol MiAlp del registro

reg unload /hklm\software\Mico\MiAp

Importar el archivoCopiaAp.reg

reg import CopiaAp.reg

Copia todas las subclaves y valores de MiAp a GuardaMiAp

reg copy hklm\software\mico\MiAp hklm\Software\Mico1

Copiar todos los valores de la clave Mico en otro equipo al equipo actual

reg copy \\equipo\hklm\softwaer\Mico hklm\software\mico1

Restaurar el archivo CopiaAp.hiv sobreescribiendo la clave 'datos'

reg restore hklm\software\mico\MiAp\Datos CopiaAp.hiv

Volver al menú

14 Enviar por ftp de forma automática (cortesía de rkk)
@echo off
rem Inicia sesion en el servidor FTP
ftp -s:Coman.txt 124.102.23.5

en la ultima linea estoy indicando con el -s:Coman.txt el nombre del archivo donde se encuentran guardados los comandos que va a ejecutar el ftp seguido de la direccion ip a la que me voy a conectar; dentro del archivo Coman.txt tengo el nombre del usuario, la contraseña y los comandos que se van a ejecutar:

Ejemplo:
Marco
12345
binary
hash
bye

fuente: no recuerdo

darkguidoo
04/12/2008, 14:38
Y aca les dejo un ejemplo de una calculadora hecha en batch:



::::::::::::::::::::::::::::::::::::::::
::efecto matrix::::::::::::::
::::::::::::::::::::::::::::::::::::::::
@echo off

title Efecto Matrix
color A

set contador=0

:Matrix

echo /? >nul
echo 0 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1 0 1 0 0 1 1 1 0 1 0 0 1 1 1 0 0 0 1 1 0
echo /? >nul
echo /? >nul
echo /? >nul
echo /? >nul
echo /? >nul
echo 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 0 0 0 1 0 1 0 1 1 0 0 0 1 0 1 1 0 0 0 1 1 1 0 0 1

if %contador% == 150 goto menu
set/a contador+=1

goto Matrix




:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::
::MENU PRINCIPAL::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::

:menu

title Calculadora en batch
cls
color 09

echo Que desea hacer?
echo.
echo 1.Sumar
echo 2.Restar
echo 3.Multiplicar
echo 4.Dividir
echo 5.Elevar
echo 6.Factorial
echo 7.Operaciones aritmeticas en general
echo 8.Q
echo 9.Traducir numero hexadecimal a decimal
echo 10.Traducir numero octal a decimal
echo 11.Recalcular el resultado
echo 12.Ayuda
echo 13.Salir
echo.

set/p var=

::::::::::::::::::::::::::
:::OPCIONES:::
::::::::::::::::::::::::::

if %var% == 1 goto SUM
if %var% == 2 goto RES
if %var% == 3 goto MUL
if %var% == 4 goto DIV
if %var% == 5 goto EXP
if %var% == 6 goto FAC
if %var% == 7 goto GEN
if %var% == 8 goto Q
if %var% == 9 goto TRAH
if %var% == 10 goto TRAO
if %var% == 11 goto REC
if %var% == 12 goto AYU
if %var% == 13 goto SAL

cls
echo La operacion no es valida
pause>nul
goto menu

::::::::::::::::::::::::::::::::::::::::::::::::
::SUMA::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::
:SUM
cls

echo SUMA
echo.
echo Coloque el primer sumando
echo.
set/p var1=
echo.
echo Coloque el segundo sumando
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var= %var1% + %var2%
echo %var%

pause>nul
set rec1=%var%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::
::RESTA::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::
:RES
cls

echo RESTA
echo.
echo Coloque el minuendo
echo.
set/p var1=
echo.
echo Coloque el sustraendo
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var= %var1% - %var2%
echo %var%

pause>nul
set rec1=%var%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::
::MULTIPLICACION::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::
:MUL
cls

echo MULTIPLICAR
echo.
echo Coloque el primer factor
echo.
set/p var1=
echo.
echo Coloque el segundo factor
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var= %var1% * %var2%
echo %var%

pause>nul
set rec1=%var%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::
::DIVISION:::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::
:DIV
cls

echo DIVISION
echo.
echo Coloque el dividendo
echo.
set/p var1=
echo.
echo Coloque el divisor
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var3= %var1% / %var2%
echo %var3%
set var= %var1% %% %var2%
set/a var= %var%
echo.
echo Sobra %var%

pause>nul
set rec1=%var3%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::
::EXPONENCIACION:::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::
:EXP
cls

echo EXPONENCIACION
echo.
echo Coloca la base
echo.
set/p var1=
echo.
echo Coloca el exponente
echo.
set/p var2=
echo.
set/a var3= %var1%
set/a var4= 0

goto bucle

:bucle
set/a var4= %var4% + 1
if %var4% == %var2% goto resultado
set/a var1= %var1% * %var3%
goto bucle

:resultado
echo El resultado es
echo.
echo %var1%

pause>nul
set rec1=%var1%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::
::FACTORIAL::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::
:FAC
cls

echo FACTORIAL
echo.
echo Coloque el numero
echo.
set/p var1=
set var2=%var1%
echo.

goto bucle2

:bucle2
set/a var2=%var2% - 1
set/a var1*=%var2%
if %var2% == 1 goto fin
goto bucle2

:fin
echo El factorial es
echo.
echo %var1%

pause>nul
set rec1=%var1%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::
::OPERACIONES CONVINADAS::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::
:GEN
cls

echo OPERACIONES CONVINADAS
cls
echo Coloque el calculo. . .
echo.
set/p var1=
set/a var1=%var1%
echo.
echo El resultado es %var1%

pause>nul
set rec1=%var%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:Q
color 0f
cls
title Operaciones en Q

echo Que desea hacer?
echo.
echo 1.Sumar
echo 2.Restar
echo 3.Multiplicar
echo 4.Dividir
echo 5.Exponenciar
echo 6.Simplificar
echo 7.Recalcular
echo 8.Regresar al menu
echo.
set/p var=

:::::::::::::::::::::::
:::opciones:::
:::::::::::::::::::::::

if %var% == 1 goto SUMQ
if %var% == 2 goto RESQ
if %var% == 3 goto MULQ
if %var% == 4 goto DIVQ
if %var% == 5 goto EXPQ
if %var% == 6 goto SIM
if %var% == 7 goto RECQ
if %var% == 8 goto MENU

cls
echo La operacion no es valida
pause>nul
goto menu

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
::SUMAR::::::::::::::::::::::::::::::::::::::::::: ::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
:SUMQ
cls

echo SUMA DE FRACCIONARIOS
echo.
echo Coloque el primer sumando
echo.
set/p var1=
echo -----------
set/p var2=
echo.
echo Coloque el segundo sumando
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% + %var3%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto Q
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
::RESTAR:::::::::::::::::::::::::::::::::::::::::: ::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
:RESQ
cls

echo RESTA DE FRACCIONARIOS
echo.
echo Coloque el minuendo
echo.
set/p var1=
echo -----------
set/p var2=
echo.
echo Coloque el sustraendo
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% - %var3%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto Q
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::
::MULTIPLICAR::::::::::::::::::::::::::::::::::::: ::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::
:MULQ
cls

echo MULTIPLICACION DE FRACCIONARIOS
echo.
echo Coloque el primer factor
echo.
set/p var1=
echo -----------
set/p var2=
echo.
echo Coloque el segundo factor
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% * %var3%
set/a var5/= %var%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto Q
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::
::DIVISION:::::::::::::::::::::::::::::::::::::::: ::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::
:DIVQ
cls

echo DIVISION DE FRACCIONARIOS
echo.
echo Coloque dividendo
echo.
set/p var1=
echo -----------
set/p var2=
echo.
echo Coloque divisor
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set var6= %var3%
set var3= %var4%
set var4= %var6%

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% * %var3%
set/a var5/= %var%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto Q
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: ::::::::::::
::EXPONENCIACION:::::::::::::::::::::::::::::::::: ::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: ::::::::::::
:EXPQ
cls

echo EXPONENCIACION DE FRACCIONARIO POR ENTEROS
echo.
echo Coloque la base
echo.
set/p var1=
echo -----------
set/p var2=
echo.
echo Coloque el exponente
echo.
set/p var3=

set var4= 0
set var5=%var1%
set var6=%var2%

goto bucle3


:bucle3
set/a var4= %var4% + 1
if %var4% == %var3% goto resultado2
set/a var1*=%var5%
set/a var2*=%var6%
goto bucle3

:resultado2
echo.
echo %var1%
echo -----------
echo %var2%

pause>nul
set rec1=%var1%
set rec2=%var2%
goto Q
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::
::SIMPLIFICACION:::::::::::::::::::::::::::::::::: ::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::
:SIM
cls

echo SIMPLIFICACION
echo.
echo Ingrese el numero
echo.
set/p var1=
echo -----------
set/p var2=
echo.

set var3=100

:buclee

if %var3% == 1 goto no

set var5= %var2% %% %var3%
set var4= %var1% %% %var3%
set/a var4= %var4%
set/a var5= %var5%

if %var4% gtr 0 goto rea
if %var5% gtr 0 goto rea

set/a var1/= %var3%
set/a var2/= %var3%

echo %var1%
echo -----------
echo %var2%
echo.
echo.
echo Simplificado por %var3%
echo.
echo ___________________ ________
echo.
set var3=100
goto buclee

:rea
set/a var3-= 1
goto buclee

:no
echo.
echo El numero no es mas simplificable por un numero del 1 al 100

pause>nul

pause>nul
set rec1=%var1%
set rec2=%var2%
goto Q
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: ::::
::RECALCULAR:::::::::::::::::::::::::::::::::::::: :::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: ::::
:RECQ
cls
title Recalcular Q

echo Que desea hacer?
echo.
echo 1.Sumar
echo 2.Restar
echo 3.Multiplicar
echo 4.Dividir
echo 5.Exponenciar
echo 6.Simplificar
echo 7.Regresar al menu Q
echo.
set/p var=

if %var% == 1 goto SUMRQ
if %var% == 2 goto RESRQ
if %var% == 3 goto MULRQ
if %var% == 4 goto DIVRQ
if %var% == 5 goto EXPRQ
if %var% == 6 goto SIMRQ
if %var% == 7 goto Q

cls
echo La operacion no es valida
pause>nul
goto menu

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
::SUMAR::::::::::::::::::::::::::::::::::::::::::: ::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
:SUMRQ
cls

echo SUMA DE FRACCIONARIOS
echo.
echo Primer sumando
echo.
echo %rec1%
echo -----------
echo %rec2%
echo.
echo Coloque el segundo sumando
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set var1=%rec1%
set var2=%rec2%

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% + %var3%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto RECQ
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::
::RESTA::::::::::::::::::::::::::::::::::::::::::: ::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::
:RESRQ
cls

echo RESTA DE FRACCIONARIOS
echo.
echo Minuendo
echo.
echo %rec1%
echo -----------
echo %rec2%
echo.
echo Coloque el sustraendo
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set var1=%rec1%
set var2=%rec2%

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% - %var3%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto RECQ
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::
::MULTIPLICACION::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::
:MULRQ
cls

echo MULTIPLICACION DE FRACCIONARIOS
echo.
echo Primer factor
echo.
echo %rec1%
echo -----------
echo %rec2%
echo.
echo Coloque el segundo factor
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set var1=%rec1%
set var2=%rec2%

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% * %var3%
set/a var5/= %var%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto RECQ
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::
::DIVISION:::::::::::::::::::::::::::::::::::::::: :::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::
:DIVRQ
cls

echo DIVISION DE FRACCIONARIOS
echo.
echo Dividendo
echo.
echo %rec1%
echo -----------
echo %rec2%
echo.
echo Coloque divisor
echo.
set/p var3=
echo -----------
set/p var4=
echo.
echo.

set var1=%rec1%
set var2=%rec2%

set var6= %var3%
set var3= %var4%
set var4= %var6%

set/a var=%var2% * %var4%
set/a var1*= %var4%
set/a var3*= %var2%
set/a var5=%var1% * %var3%
set/a var5/= %var%

echo %var5%
echo -----------
echo %var%

pause>nul
set rec1=%var5%
set rec2=%var%
goto RECQ
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::
::EXPONENCIACION:::::::::::::::::::::::::::::::::: :::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::
:EXPRQ
cls


echo EXPONENCIACION DE FRACCIONARIO POR ENTEROS
echo.
echo Base
echo.
echo %rec1%
echo -----------
echo %rec2%
echo.
echo Coloque el exponente
echo.
set/p var3=

set var1=%rec1%
set var2=%rec2%

set var4= 0
set var5=%var1%
set var6=%var2%
goto bucle3


:bucle4
set/a var4= %var4% + 1
if %var4% == %var3% goto resultado2
set/a var1*=%var5%
set/a var2*=%var6%
goto bucle4

:resultado2
echo.
echo %var1%
echo -----------
echo %var2%

pause>nul
set rec1=%var1%
set rec2=%var2%
goto RECQ
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :
::SIMPLIFICACION:::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: :
:SIMRQ
cls

echo SIMPLIFICACION
echo.
echo Numero. . .
echo.
echo %rec1%
echo -----------
echo %rec2%
echo.
pause>nul

set var1=%rec1%
set var2=%rec2%

set var3=100

:buclee2

if %var3% == 1 goto no2

set var5= %var2% %% %var3%
set var4= %var1% %% %var3%
set/a var4= %var4%
set/a var5= %var5%

if %var4% gtr 0 goto rea2
if %var5% gtr 0 goto rea2

set/a var1/= %var3%
set/a var2/= %var3%

echo %var1%
echo -----------
echo %var2%
echo.
echo.
echo Simplificado por %var3%
echo.
echo ___________________ ________
echo.
set var3=100
goto buclee2

:rea2
set/a var3-= 1
goto buclee2

:no2
echo.
echo El numero no es mas simplificable por un numero del 1 al 100

pause>nul
set rec1=%var1%
set rec2=%var2%
goto RECQ
:::::::::::::::::
:::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::
::FINAL DE OPERACIONES Q::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::
::TRADUCCION DE HEXADESIMA A DESIMAL::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::
:TRAH
cls

echo TRADUCCION DE HEXADESIMA A DESIMAL
echo.
echo Coloque numero a tradusir
set/p var=
set var2= 0x%var%
set/a var= %var2%
echo.
echo El numero es...
echo.
echo %var%
echo.

pause>nul
set rec1=%var%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :
::TRADUCCION DE OCTAL A DESIMAL::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :
:TRAO
cls

echo TRADUCCION DE OCTAL A DESIMAL
echo.
echo Coloque numero a tradusir
set/p var=
set var2= 0%var%
set/a var= %var2%
echo.
echo El numero es...
echo.
echo %var%
echo.

pause>nul
set rec1=%var%
goto menu
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
::RECALCULAR:::::::::::::::::::::::::::::::::::::: ::::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::
:REC
cls
title RECALCULAR


echo Que desea hacer?
echo.
echo 1.Sumar
echo 2.Restar
echo 3.Multiplicar
echo 4.Dividir
echo 5.Elevar
echo 6.Factorial
echo 7.Operaciones aritmeticas en general
echo 8.Volver al menu
echo.

set/p var=

::::::::::::::::::::::::::::::::
:::::OPCIONES:::::::
::::::::::::::::::::::::::::::::

if %var% == 1 goto SUMR
if %var% == 2 goto RESR
if %var% == 3 goto MULR
if %var% == 4 goto DIVR
if %var% == 5 goto EXPR
if %var% == 6 goto FACR
if %var% == 7 goto GENR
if %var% == 8 goto menu

cls
echo La operacion no es valida
pause>nul
goto REC

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::
::SUMA:::::::::::::::::::::::::::::::::::::::::::: ::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::
:SUMR
cls

echo SUMA
echo.
echo Primer sumando
echo.
echo %rec1%
echo.
echo Coloque el segundo sumando
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var= %rec1% + %var2%
echo %var%

pause>nul
set rec1=%var%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
::RESTA::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
:RESR
cls

echo RESTA
echo.
echo Minuendo
echo.
echo %rec1%
echo.
echo Coloque el sustraendo
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var= %rec1% - %var2%
echo %var%

pause>nul
set rec1=%var%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::
::MULTIPLICACION:::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::
:MULR
cls

echo MULTIPLICAR
echo.
echo Primer factor
echo.
echo %rec1%
echo.
echo Coloque el segundo factor
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var= %rec1% * %var2%
echo %var%

pause>nul
set rec1=%var%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::
::DIVISION:::::::::::::::::::::::::::::::::::::::: ::
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::
:DIVR
cls

echo DIVIDIR
echo.
echo Dividendo
echo.
echo %rec1%
echo.
echo Coloque el divisor
echo.
set/p var2=
echo.
echo El resultado es
echo.
set/a var3= %rec1% / %var2%
echo %var3%
set var= %rec1% %% %var2%
set/a var= %var%
echo.
echo sobra %var%

pause>nul
set rec1=%var3%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::
::EXPONENCIACION:::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::
:EXPR
cls

echo EXPONENCIACION
echo.
echo Base
echo.
echo %rec1%
echo.
echo Coloca el exponente
echo.
set/p var2=
echo.

set var1=%rec1%

set/a var3= %var1%
set/a var4= 0

goto bucle5

:bucle5
set/a var4= %var4% + 1
if %var4% == %var2% goto resultado3
set/a var1= %var1% * %var3%
goto bucle5

:resultado3
echo El resultado es
echo.
echo %var1%

pause>nul
set rec1=%var1%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::
::FACTORIAL:::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
:FACR
cls

echo FACTORIAL
echo.
echo Numero
echo.
echo %rec1%
set var1=%rec1%
set var2=%var1%
echo.
pause>nul

goto bucle6

:bucle6
set/a var2=%var2% - 1
set/a var1*=%var2%
if %var2% == 1 goto fin2
goto bucle6

:fin2
echo El factorial es
echo.
echo %var1%

pause>nul
set rec1=%var1%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
::OPERACIONES CONVINADAS:::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
:GENR
cls

echo OPERACIONES CONVINADAS
echo.
echo Numero
echo.
echo %rec1%
echo.
echo Coloque el oprador
echo.
set/p var2=
echo.
echo Coloque el calculo. . .
echo.
set/p var1=
set/a var1=%rec1%%var2%%var1%
echo.
echo El resultado es %var1%

pause>nul
set rec1=%var1%
goto REC
:::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::
::FIN DE MENU RECALCULAR:::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
::AYUDA::::::::::::::::::::::::::::::::::::::::::: ::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::


:AYU
@echo off
title Ayuda!!
pause>nul
color 0c
echo este es el menu de ayuda de la calculadora
pause
cls
echo para poder usar la calculadora es necesario elegir una opcion para realizar la operacion deseada ,si esta leyendo esto es probable que ya sepa hacerlo, la forma de seleccionar una opcion es escribiendo su numero y darle enter; acontinuacion de eso ya estaras en el menu deseado
pause
cls
echo en el menu principal veras varias opciones: suma , resta , multiplicacion , entre otras, en muchas de ellas el programa les pedira ingresar los numero...pero en la opcion "operaciones aritmeticas en general" ustedes deberan introducir un calculo combinado...
pause
cls
echo para hacer un calculo combinado solo podras usar las 4 operaciones basicas: suma , resta , multiplicacion , division
echo.
echo para hacer una operacion es necesario tener muy claro que no podras utilizar los mismos operadores que usas en un papel
echo es decir q esto: 2x3 no seria 6 al = que 2.3 que tanpoco da 6 para hacer 2 por 3 seria 2*3 que dara 6
echo (el asterisco es el operador q multiplica en MS-dos ,y por lo tanto tanbien en la calculadora)
pause
cls
echo tanbien es necesario tener en cuenta que los operadores tienen jerarquias como ya supongo que sabes:
echo 6 + 2 * 3 = 12
echo (6 + 2) * 3 = 24
echo para romper la prioridad o agrupar operaciones solo se necesita usar parentesis (los corchetes y llaves no son nesesarias/os) solo se necesitan parentesis:
echo [(2 + 3) * 2] / 2= ERROR
echo ((2 + 3) * 2) / 2= 5
pause
cls
echo los operadores son
echo.
echo + ------- Suma
echo - ------- Resta
echo * ------- Multiplicacion
echo / ------- Division
echo %%% ------- Resto de una division
echo.
pause
cls
echo las opciones de recalcular sirven para trabajar con el resultado de operaciones
echo es decir haces un calculo y despues trabajas con ese resultado
pause
cls
echo Q es un menu de operaciones racionales "fraccionarias" para ser mas presiso
echo pose operaciones vasicas como suma resta multiplicacion division y simplificaion (la exponenciacion no son fracciones si no fracciones y enteros)
echo precione una tecla para terminar
pause>nul
cls
goto menu
::::::::::::::::::::::::::
::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::
::SALIR::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::
:SAL
cls

color 0f
echo.
echo.
echo.
echo.
echo ***************************************
echo * Calculadora by guidoo para *
echo * playonline.com.ar *
echo * saludos *
echo ***************************************
echo.
pause>nul
cls
color f0
echo.
pause>nul
exit



NOTA: Cuando vean los 1's y 0's al principio no se asusten xD es simplemente un "efecto" onda matrix que se puede sacar borrando desde :
::::::::::::::::::::::::::::::::::::::::
::efecto matrix::::::::::::::
::::::::::::::::::::::::::::::::::::::::

hasta:
goto Matrix






Saludos.