Está en la página 1de 18

INTRODUCCION

Muchos piensan que los ficheros batch no sirven mas que para indicar al DOS que programas debe cargar al arrancar. Un vistazo al manual del DOS, o a la ayuda del DOS nos muestra un lenguaje muy limitado, sin variables numricas, ni tratamiento de cadenas, ni ningn tipo de estructuracin. El manual no da mas que unas mnimas explicaciones para que el usuario pueda modificar, si es necesario su AUTOEXEC.BAT, y poca cosa mas. Yo me qued muy sorprendido de encontrar en el grupo de noticias alt.msdos.batch expertos capaces de hacer cosas inverosmiles. Incluso hay quien tiene una pgina web en que se explica paso a paso el desarrollo de un "maligno" virus en lenguaje batch, capaz de infectar a todos los batch de un PC (a nivel de creacin artstica, por supuesto, como l mismo dice). Algunos trucos son realmente tiles, como el que permite salvar el directorio actual(Push_pop), y despus volver a l. O el que, puesto en el autoexec.bat, permite ejecutar un programa slo si es -por ejemplo- Viernes. Todo ello es posible apurando las instrucciones del DOS hasta el lmite, y gracias a la experiencia compartida en la red por miles de usuarios. Esta pgina es un palido reflejo de las de los autenticos gurus de la programacin batch. Slo intenta acercar estos trucos a aquellos para los que la lengua inglesa constituye un problema. Algunos dirn para qu tanta complicacin, si existen soluciones alternativas: Sustitutos del command.com como el NDOS o el 4DOS: Son muy tiles, pero recordad que ms de un programa DOS (y Windows!!) ejecuta de cuando en cuando una orden de DOS en un SHELL. Al tener algunas rdenes de estos sustitutos el formato de salida y las opciones distintas, el programa puede fallar. Es indispensable probar todos los programas cuando se instale uno de estos substitutos. Programas externos extensores del DOS. Ok, solo es necesario encontrar el programa necesario. Solo hay que irse a Simtel o similar y empezar a buscar. Hay miles de ellos, cada uno cubre una necesidad puntual. Es necesario no abusar, pues podemos terminar con un sistema DOS tan recargado de ficheros como el W95 Programar en QBasic, que viene gratuito con el Windows. El Qbasic tiene mas de 250 ordenes, es un lenguaje que tiene su aprendizaje. Una vez completado ste, podemos encontrarnos sorpresas como que para copiar un fichero, o para cambiar de disco lo mas facil es hacer un SHELL y ejecutar una orden DOS. Eso si, tenemos tratamiento de cadenas y operaciones matemticas. En Windows tenemos el Visual Basic para Aplicaciones, para ejecutarlo solo debemos tener abierta de las aplicaciones de Microsoft Office y aprendernos un lenguaje extenssimo, con una jererqua de objetos enorme. Java, VBScript, etc son lenguajes que se ejecutan en el navegador de Internet, pero que por necesidades de seguridad no contienen ninguna instruccin que pueda afectar al sistema de ficheros de nuestro ordenador, es decir no son capaces de instalar programas, copiar ficheros, modificar registros, etc.

Bien, lo que sigue es un cajon de sastre con trucos,etc. Recomiendo a todos leerse antes el manual del DOS, para repasar los rudimentos del invento

INDICE
Trucos para Depuracin Documentacion Secuencia de Ejecucion Entradas de Usuario Cadenas Alfanumericas Consideraciones para Windows Discos y Directorios Fecha, Hora, Temporizado Contaje, Numeros Ordenes del DOS

TRUCOS PARA DEPURACION


-Echo selectivo: Iniciar el programa con @echo %debug% off .Antes de ejecutar en debug, hacer set debug=ON -Ejecutar paso a paso command /y /c bat_a_probar parametros. Command pide confirmacionantes de cada paso -poner %breakp% cada un cierto trozo. Al probar programa SET breakp=pause Davis utiliza unos ficheros para debug

DOCUMENTACION
Para conseguir que un batch haga cosas tiles hay que complicarse mucho la vida, a pesar de que un batch raramente pasar de las 30 lineas, es facil olvidar que en que demonios estbamos pensando cuando programamos aquello. Solucion: Documentar bien cada trozo del batch!

Comentario Oficial: Iniciar la lnea con REM. Es lento, porque el interprete de comandos procesa toda la linea. Por ejemplo, si la lnea contiene un simbolo de redireccin, sta se ejecutar, a pesar de ser una lnea de comentarios! Comentario no oficial : iniciar la lnea con un ::, el interprete lo considera como una etiqueta errnea y no lee mas alla del 2 caracter
espacio %

pueden introducirse comentarios de linea: % rodear comentario con porciento+ Ayuda a usuario: Poner como primera linea despus de @echo off:

if [%1==[ for %%i in (echo pause goto:end) do %%i Funcion del programa SINTAXIS %0 Descripcion de los parametros

Si no hay parmetros en la llamada al programa se visualizar una ayuda y se terminar la ejecucin.

CONTROL DE SECUENCIA DE EJECUCION


-Subrutinas contenidas en el propio programa. Para ello se utiliza un parmetro de llamada mas que el maximo de parmetros necesarios para el programa y las subrutinas. Por ejemplo si el programa requiere 3 parmetros:
@echo %debug% off %4 if [%1==[ for %%i in (echo pause goto:end) do %%i SINTAXIS %0 par_1 par_2 par_3 ::programa principal call %0 par_1 par_2 falso goto:rutina1 % como la llamada tiene menos de 3 param, se intercala parametro falso % ::programa principal call %0 par_1 par_2 par_3 goto:rutina2 ::programa principal goto end :rutina1 ::rutina1 goto end :rutina2 goto end :end cls

Cuando se desea ejecutar una subrutina el programa se llama a si mismo (call %0) con un gosub:subrutina como 4 parametro. Si ste no existe se ejecuta el programa principal. Si ste existe, se ejecuta (%4) el salto a la subrutina correspondiente. Minisubrutinas : La instruccin FOR permite asignar asu variable ordenes del DOS que se ejecutan una detrs de otra, lo que permite crear rutinas en una sola linea -Ayuda_Usuario

for %%i in (echo pause goto:end) do %%i SINTAXIS %0 par_1 par_2 par_3

Tratamiento de errores:
if condicion for %%i in (echo pause goto:end) do %%i Mensaje

-Llamada y borrado de un bat temporal


for %%i in (call del) do %%i temp.bat

-Bucle contador set

PROCESAR ENTRADAS DEL USUARIO


Esperar una tecla PAUSE Seleccionar entre varias opciones pulsando una tecla CHOICE

Pedir cadena de texto

:: ASK.bat :: acepta entrada de usuario. Este programa esta escrito para una version local de DOS @ECHO OFF IF [%1==[ FOR %%I IN (ECHO PAUSE GOTO:END) DO %%I Guarda entrada usuario en Variable USO: %0 Variable Prompt echo %2 %3 %4 %5 %6 %7 %8 %9: echo shift>escriba.bat echo shift>>escriba.bat echo shift>>escriba.bat echo shift>>escriba.bat echo shift>>escriba.bat echo set %1=%%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>>escriba.bat fc con nul /lb1 /n | date | find " 1: " > }{.bat call }{.bat del }{.bat>nul del escriba.bat>nul :END

Evitar interrupciones por parte del usuario Rodear la parte importante con
Ctty nul . .

ctty con

Todas las salidas a pantalla dentro de la parte no interrumpible se harn con redireccin a >con Las entradas de teclado dentro de la parte no interrumpible requieren redireccion de <con

TRATAMIENTO de CADENAS ALFANUMRICAS


-Obtener nombre fichero sin extension rename permite ren *.* *. con lo que eliminamos ext -Procesar palabras de una cadena Pasarlos a DATE y usar palabras como parametros de bat auxiliar -Procesar una a una letras de una palabra Pre W95 usar for W95/98 usar choice -Procesar los ficheros con una extensin -Procesar las lineas de texto de una lista como parametros de un batch Ver procesa_listas

TRUCOS PARA WINDOWS


-Si creamos acceso directo a un batch en el escritorio y arrastramos algunos ficheros hasta l,ejecutamos el batch con los nombres de los archivos como parmetros -El truco para separar carcacteres con for %i in (/palabra) no funciona LFNFOR conmuta on-off los LFN antes y despues de un FOR. Tiene bug: si la variable for incluye path y LFNFOR on, solo 1er bucle recibe path-dir /b lista en LFN dir /z/b saca nombres en formato 8.3 -Para cerrar ventana dos al terminar bat, simplemente ejecutar un cls -start /w orden_windows espera para continuar bat a terminar la orden. Si no se pone /w el bat se sigue ejecutando, lo que permite ejecutar a la vez varios programas, por ejemplo, ejecutar una intro musical cada vez que arranquemos un programa determinado.

-start /m arranca minimizado -Cuando se cierra la ventana DOS en que ejecutamos un bat, las vars creadas dentro de esta desaparecen, ya que se trata de una shell secundaria. Por ello las variables que creemos en una ventana no las tendremos disponibles en otra ventana DOS.

DISCOS, DIRECTORIOS
Ver si directorio existe en disco removible (CD)
:: chkdir.bat dir (no LFN) :: pone la variable exists a si o no @echo off set exists=si %comspec% /f /c dir /-p %1 | find /i "%1" > nul if errorlevel 1 set exists=no

Ver si un directorio existe en disco duro. Este truco est incluso en la ayuda del dos
set exists=no if exist c:\dir\nul.* set exists=si

El disco existe, si es extraible esta preparado?


@echo %debug% off if [%1]==[] for %%v in (echo pause goto:End) do %%v SINTAXIS: %0 Letra_Unidad ctty nul %comspec% /f/c vol %1: | find /c /I "Vol" | choice /n/c210 > nul if errorlevel 3 goto End %comspec% /f/c dir %1:\!dummy!.@@@ | find "Dir" /c | choice/n/c10x :End ctty con ::Lo que sigue no forma parte de la rutina, est para visualizar el resultado if errorlevel 4 echo Ha pasado algo raro if not errorlevel 4 if errorlevel 3 echo Unidad %1: no existe if not errorlevel 3 if errorlevel 2 echo Unidad %1: existe, no est lista if not errorlevel 2 if errorlevel 1 echo Unidad %1: preparada

Ejecutar orden en subdirectorios: En cada directorio crear un listado de subdirectorios con


dir /b /ad>fichero

a continuacin utilizar tratamiento de listas Guardar (push) en variablle de entorno directorio actual para recuperarlo al final del programa (pop) Push:
@echo off echo @prompt set _Here=$p$_ > _temp_A.bat %comspec% /e:2048 /c _temp_A.bat > _temp_B.bat

call _temp_B.bat del _temp_?.bat @echo off "%_Here%\ cd "%_Here%

Pop:

Devolver nombre de fichero sin extension


::%1 es nombre fichero, devuelve el nombre sin extension en noext md _temp_ cd _temp_ rem>%1 ren *.* *. % aqui est el truco!! % for %%i in (*.) do set noext=%%i cd.. deltree /y _temp_

Devolver la extension de un fichero


@echo off if %1==:: goto test echo = |choice /c=%1= %0 :: >}{temp.bat call }{temp.bat echo La extension de %1 es %}ext{% set }ext{= del }{*.bat goto end :test if '%2'==']?' goto end set }ext{=%}ext{%%2 if %2==. set }ext{= shift goto test :end

Contar numero de ficheros en directorio


@echo off attrib /s c:\*.* | find /c "\"

Comprobar si un path dado contiene comodines

@echo off for %%f in (%1) do if "%%f"=="%1" goto _nowilds echo Parameter %1 contains wildcards (or is missing) :_nowilds

CREACION DE FICHEROS AUXILIARES


Una tcnica muy comn en la programacin de batch es la creacin, llamada y posterior borrado de ficheros batch auxiliares para ejecutar ordenes que las limitaciones del batch impiden crear: Envio de redirecciones y pipes al fichero secundario Por ejemplo si intentamos editar un conjunto de ficheros con SED (editor de textos mandado desde lnea de rdenes proveniente del entorno UNIX) dejando los ficheros editados en otro directorio con
for %%i in (*.txt) do sed -e"s/Pepe/Juan/" %%i > c:\temp\%%i

no funcionar, ya que la orden de redireccin se interpreta antes que el for, y en ese momento %%i an no tiene valor!. Debemos utilizar un fichero auxiliar!
echo sed -e"s/Pepe/Juan" %%1>c:\temp\%%1 >bat2.bat for %%i in (*.txt) do call bat2.bat %%i

Esto no funcionar ya que los caracteres de redireccin se interpretan primero y el primer caracter de redireccin de la primera linea se ejecuta en vez de ser enviado como caracter a bat2.bat.
echo " sed -e"s/Pepe/Juan" %1>c:\temp\%1 " >bat2.bat for %%i in (*.txt) do call bat2.bat %%i

Solucion Windows 95 El rodear una parte con "" nos proteger los caracteres de redireccin pero obtendremos una cadena rodeada de " en el fichero secundario, no ejecutable
echo %%"%% sed -e"s/Pepe/Juan" %1>c:\temp\%1 %%"%% >bat2.bat for %%i in (*.txt) do call bat2.bat %%i el truco consiste en rodear la linea entera que queremos mandar al fichero secundario con %%"%%. El DOS lo interpreta como %"% y lo escribe en el fichero secundario. Al ejecutar el secundario, %"% se intentar sustituir por el valor de la variable de entorno ", que (normalmente) no existir, o sea que se ignorar.

Solucin DOS hasta 6.2 En DOS 6.2 el truco de las comillas no funciona Hacemos que las lineas a enviar a secundario sean nicas, las saltamos , filtramos a travs de FIND el propio fichero para que su salida sea el secundario. En el ejemplo las lineas a enviar tienen 3 espacios delante. Se utiliza una doble bsqueda, la primera busca las lineas con 3 espacios, con lo que el find se encuentra a si, mismo. La 2 busqueda elimina las lneas que tengan 4 espacios, con lo que la linea del FIND se elimina a s misma.
goto process chkdsk | find "65535" > nul if errorlevel 1 echo You have a virus! :process type MAIN.BAT | find " "| find /v " " > TEMP.BAT call temp.bat del temp.bat

Si hay que crear varios ficheros auxiliares, no podemos contar con los espacios, deberemos utilizar variables de sistema inexistentes.
goto process %"1% chkdsk | find "65535" > nul %"1% if errorlevel 1 echo You have a virus! :process type MAIN.BAT | find "%%""1%%" > TEMP.BAT call temp.bat del temp.bat

FECHA,HORA,TEMPORIZADO

Temporizado: CHOICE permite un parmetro de n segundos de espera, hasta 99 segundos Permite interrumpirlo pulsando tecla
choice /c:. /t:.,5 /n Pausing for five seconds

Esta version no admite interrupciones


type nul | choice /c:. /t:.,5 /n Pausing for five seconds

Poner fecha/hora en variable sistema: Usar prompt:Ver apartado 10 registrar hora de arranque y paro de progama Hacer batch wrapper que al entrar y salir llame a
::LOG.BAT iMPRIME DIA Y HORA ACTUAL EN UN LOG CADA VEZ QUE SE EJECUTA @echo off if [%1==[ for %%i in (echo pause goto:end) do %%i Registra eventos USO: %0 Texto Fichero_reg echo %1>>%2 echo.|date|find "actual">>%2 echo.|time|find "actual">>%2 :end cls

registrar arranque y paro de windows 95 Para el arranque, llamar a log.bat desde in bat en la carpeta inicio Para el paro : Evitar que arranque GUI editando msdos.sys BootGUI=0 Aadir en autoexec bat la linea win, que arrancar windows Aadir a continuacin la llamada a log.bat Correr un programa un dia de la semana: Ojo depende de la version local de DOS!
@echo off echo.| date | find "actual" > tmp$$$.bat echo set weekday_=%%4> la.bat call tmp$$$ echo %weekday_% if "%weekday_%"=="Dom" echo Thank God it's Friday if exist tmp$$$.bat del tmp$$$.bat if exist current.bat del la.bat set weekday_=

CONTAJE, VALORES NUMERICOS

for %%i in (1 2 3 4 5 6 7 8 9 10) do echo %%i

Limitar n veces que se ejecuta un bucle Contar de 0 a 999

@echo %dbgc% off %5 %4 %3 %2 if [%1]==[] for %%v in (echo goto:End) do %%v Syntax: %0 Number %5 %4 %3 %2 for %%v in (%comspec% goto:End) do %%v /e:2048 /c %0 %1 :: %5 for %%v in (0 1 2 3 4 5 6 7 8 9) do call %0 %1 %%v %2 %3 %4 %5 goto End echo %4%3%2 for %%v in (%2 %3%2 %4%3%2) do if %1==%%v exit :End

LAS ORDENES DEL DOS


COMMAND [[unidad:]ruta] [dispositivo] [/E:nnnnn] [/L:nnnn] [/U:nnn] [/P] [/MSG] [/LOW] [/Y [/[C|K] comando]]

COMMAND Ejecutar un nuevo procesador de ordenes.

Inicia una copia nueva del intrprete de comandos de Windows. [unidad:]ruta Especifica el directorio que contiene el archivo COMMAND.COM. dispositivo Especifica el dispositivo que se utilizar para entrada ysalida de comandos. /E:nnnnn Establece el tamao inicial del entorno en nnnnn bytes.(nnnnn debe estar entre 256 y 32.768) /L:nnnn Especifica la longitud de los bferes internos (requiere /P).(nnnn debe estar entre 128 y 1.024) /U:nnn Especifica la longitud del bfer de entrada (requiere /P).(nnn debe estar entre 128 y 255) /P Hace que el nuevo intrprete de comandos sea permanente(no se puede salir) /MSG Almacena los mensajes de error en memoria (requiere /P). /LOW Hace que COMMAND mantenga informacin residente enmemoria baja. /Y Ejecuta linea a linea el programa por lotes especificado por /C o /K. /C comando Ejecuta el comando especificado y vuelve. /K comando Ejecuta el comando especificado y sigue ejecutndose No documentadas: /F Responde automaticamente Fail al mensaje de error de E/S Abort,Retry,Fail?. Permite superar errores sin intervencin del usuario /D Si /F activo, abre nuevo shell en que /F est desactivado

/Z Visualiza ERRORLEVEL generado por cada orden /T Quin sabe?

LOADFIX.COM Es necesario recuperarlo de un DOS 5 o 6. No viene con W95.


Usado en el procesado de listas Ejecuta cualquier exe, com, bat que se le pase como parmetro. Tiene la ventaja respecto a call que al ser un comando externo puede renombrarse a Escriba.com 1 Crear la lista 2 Se envia a date|Find "Escriba" cada linea de la lista y se redirige a una nueva lista que incluir cada linea de la lista original prefijada con el texto "Escriba la fecha actual <dd-mmm-yyy>:" 3 Creamos un batch llamado la.bat que simplemente llame a la orden despues de 3 SHIFTS habremos logrado pasar cada entrada de la lista a la orden.
:: procesa lista para proceso bat. Este programa utiliza caracteristicas de una versin local de DOS :: loadfix.com debe estar en %windir%\command :: %1 es lista a procesar @echo %debug% off ::ayuda if .%1==. for %%i in (echo goto:end) do %%i prepara listas para bat USO %0 lista bat_a_ejecutar ::errores if .%2==. for %%i in (echo goto:end) do %%i falta parametro bat_a _ejecutar if not exist %windir%\command\loadfix.com for %%i in (echo goto:end) do %%i LOADFIX.COM no encontrado if not exist %1 for %%i in (echo goto:end) do %%i Tabla %1 no encontrada :: ojo!:no comprobamos si existe batch: podria ser un comando interno de dos ::convierte tabla en batch type %1|date|find "Escriba" >> }{.BAT % creamos bat aux con Escriba.. en cada lnea" % echo.>>}{.bat % ::prepara loadfix copy %windir%\command\loadfix.com .\escriba.com ::crea batch auxiliar llamado paor cada linea de tabla que llamara a la orden %2 echo @echo %%debug%% off>la.bat ECHO SHIFT >>LA.BAT % eliminamos fecha % ECHO SHIFT >>LA.BAT % eliminamos actual % ECHO SHIFT >>LA.BAT % eliminamos <dd-mm-yy> % echo if %%1.==. goto:end >>la.bat % paramos si linea en blanco % ECHO ECHO Ejecutando %2 %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>>LA.BAT ECHO CALL %2 %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>>LA.BAT echo :end >>la.bat :: lanzamos el invento call }{ :: borramos ficheros auxiliares del }{.BAT DEL LA.BAT del escriba.com :END

PROMPT Cambia informacion visualizada en la peticin de instrucciones.


Su valor se guarda en variable de sistema PROMPT Valores obtenibles mediante prompt $Q = (signo igual) $$ $ (smbolo de dolar) $T Hora actual $D Fecha actual $P Unidad de disco y ruta actuales $V Nmero de versin de MS-DOS $N Unidad actual $G > (signo mayor que) $L < (signo menor que) $B | (smbolo de canalizacin) $_ ENTRAR-AVANCE DE LINEA $E Cdigo de escape ASCII (cdigo 27) $H Retroceso (para borrar un carcter escrito en la lnea del smbolo del sistema) _ Cualquier texto fuera de los anteriores se reproducir tal como es Usos: -enviar valores del sistema a variables de entorno (fecha,hora, dir actual)
@echo off ctty nul set oldprompt=%prompt% prompt set Nombre_Variable$Q$P % creamos un prompt que dice SET Nombre_Veriable= % echo on if exist nul>temp.bat % si se pone redireccion sin accin el prompt y% hello % toda la linea siguiente se redirigen a fichero% echo off prompt %oldprompt% ctty con

-enviar a ficheros auxiliares textos con ccaracteres de redireccion,

-ejecutar ordenes ANSI.SYS sin tener que introducir el caracter de escape que en un prompt es $[

CHOICE [/C[:]teclas] [/N] [/S] [/T[:]c,nn] [texto] _

CHOICE Acepta tecla de usuario en respuesta a prompt _

texto a presentar. Slo se requieren comillas si incluye \ _ /C[:]teclas Especifica las teclas permitidas en el smbolo del sistema.CHOICE usara SN como la opcin predeterminada. /N Evita que CHOICE presente el smbolo del sistema y las teclas permitidas /S Distingue entre maysculas y minsculas. /T[:]c,nn Espera entrada por nn segundos, si se sobrepasan simula pulscion tecla c Si la c no est en [sn] o en lista de teclas dada,da error Salida: errorlevel 0=ctrlC //1,2,3,.. pulsada tecla 1,2,3... //255 error Se usa para todo excepto para lo que se cre : -Seleccion usuario (Utilizacin standard) -Pitar
echo a_ | choice /c_ /n

OJO: El subrayado no es tal sino un caracter 255 (ALT+255 en editor DOS, ALT+0255 en Notepad) -Temporizado: sin prompt ni chequear errorlevel:
choice /n /ts,10>nul

-Separar cadena en letras (en dos pre-W95 se usaba for %%i in (/cadena))
::USO Syntax: PARSE EnvName=String @echo %dbgp% off if [%1]==[] goto End if '%1'=='[?' goto Loop > {p}.bat echo;;|choice/c?%1; %0; {p} :Loop :: :: Use the letters. For example, ... :: echo. %2 :: if not '%3'==']?' for %%v in (shift goto:Loop) do %%v del {p}.bat :End

-Poner el errorlevel en funcion de la saliida de una orden

type "C:\autoexec.bat"|find /i/c "REM"!choice /n/c0123456789

Si no hay errorlevel se pone a 0,1,2 segun el numero de veces que se encuenra REM en el fichero

for %%i in ( lista) do orden_dos (puede usarse %%i como parametro de la orden dos)

FOR: Ejecuta una orden para distintos valores de una lista

No anidable Ojo, no poner nunca %%i despus de un simbolo de redireccin, ya que la redireccion se interpreta antes de ejecutar el for Usos: -Lista puede ser lista de valores (sin comodines), lista de ficheros (admite comodines)

- Puede ser lista de ordenes (minisubrutinas): - Pasar errorlevel a variable del sistema
for %%i in (0 1 2 3 4 5 6 7 8 9 ) do if errorlevel==%%i set _errorlevel=%%i - En dos pre W95 for %%i in(\cadena) ddo comando %%i pasa a comando

sucesivamente cada letra de cadena - Limitar n veces que se ejecuta un bucle


for %%i in (1 2 3 4 5 6 7 8 9 10) do echo %%i

CTTY Cambia el dispositivo de E/S standard (habitualmente es CON)


ctty [con|nul|com1|com2...]

Usos - Impedir que usuario interrumpa un programa


ctty nul programa ctty con

OJO! Es necesario hacer un CTTY CON antes de cualquier punto en que se requiera pulsar una tecla, si no el programa se bloquear en ese punto - Impedir la salida de mensajes de error aa la pantalla. La redireccin solo reenvia los mensajes "normales" de un programa, los erroes siguen saliendo a pantalla
@echo off ctty nul Orden >nul ctty con

Con esto Orden se ejecutar sin dar seales de vida -Controlar nuestro ordenador desde otro, a traves del puerto serie.

En el controlador necesitamos un programa terminal Conectar ambos ordenadores mediante un cable serie modem nulo En el ordenador a controlar, teclear ctty com1 Para terminar el control a distancia enviar desde el ordenador controlador un ctty con

FIND SET DATE FC Compara dos archivos o conjuntos de archivos y muestra las diferencias que hay entre ellos. FC [/A] [/C] [/L] [/LBn] [/N] [/T] [/W] [/nnnn] [unidad1:][ruta1]archivo1 [unidad2:][ruta2]archivo2 FC /B [unidad1:][ruta1]archivo1 [unidad2:][ruta2]archivo2 /A Muestra slo la primera y ltimas lneas para cada grupo de diferencias. /B Realiza una comparacin binaria. /C Ignora maysculas y minsculas. /L Compara archivos como texto ASCII. /LBn Establece las diferencias consecutivas m ximas al nmero especificado de lneas. /N Muestra el nmero respectivo de lnea durante una comparacin ASCII. /T No reemplaza las tabulaciones por espacios. /W Comprime espacios en blanco (tabs y espacios) al comparar. /nnnn Especifica el nmero de lneas consecutivas que deben coincidir despus de las diferencias. Uso: Comparar ficheros Obtener una cadena de texto del usuario y ponerlo en una variable del sistema:
echo set name=%%5>escriba.bat fc con nul /lb1 /n | date | find " 1: " > temp.bat call temp.bat del temp.bat>nul del escriba.bat>nul

Numerar las lineas de un fichero:


FC /N nul file.txt > file2.txt

ATTRIB SORT COPY

prompt Cambia el smbolo del sistema de Windows.


PROMPT [texto] texto Especifica un nuevo smbolo del sistema.

El smbolo puede estar compuesto por caracteres normales y los siguientes cdigos especiales: $Q $$ $T $D $P $V $N $G $L $B $H $E $_ = (signo igual) $ (signo de dlar) Hora actual Fecha actual Unidad y ruta actual Nmero de versin de Windows Unidad actual > (signo mayor que) < (signo menor que) | (Barra vertical) Retroceso (borra el car cter anterior) Cdigo de escape (cdigo ASCII 27) Retorno de carro y salto de lnea

Escriba PROMPT sin par metros para restablecer el smbolo a la configuracin predeterminada. Se utiliza para guardar datos del sistema en variables
@echo off echo @prompt set _Here=$p$_ > _temp_A.bat %comspec% /e:2048 /c _temp_A.bat > _temp_B.bat call _temp_B.bat del _temp_?.bat

o para enviar caracteres de redireccin a fichero, sin que sean interpretados IF Ejecuta hasta fin de linea si se cumple condicin

Tres sintaxis Path existe?

if exist %1 echo Path %1 existe

Igualdad de cadenas
if %1=AEIOU echo la variable es AEIOU

Errorlevel es igual o superior

if errorlevel 1 echo errorlevel mayor o igual que 1

OJO! En comparacin de cadenas no se admite simbolo ? ni *! ANSI.SYS

VARIABLES
%0 A %9 SHIFT %VAR% %%I % BLA BLA % comentario

NOTAS VARIAS
Ficheros auxiliares: usar cache, si se est en dos

REDIRECCION
< > >> | La redireccion se interpreta antes. No puede hacerse echo de caracteres de redireccion, ni a fichero Puede colocarse al principio redirigir orden que no da salida da fichero vacio

if algo -redireccion pone prompt +linea siguiente en fichero redirigido

OTROS LENGUAJES
Cuando llegamos al limite de las posiblidades del DOS, debemos orientarnos a otros lenguajes complementarios Junto con el DOS vienen dos aplicaciones poco utilizadas, que permiten extender las posibilidades, cuando se llega a un punto de complicacin poco prctico. QBASIC es un compacto y prctico interprete de basic DOS. Aunque algunos "locos" crean ficheros basic desde batch para pasarlos a qbasic, creo que es mucho mejor crear el programa entero desde el IDE del Qbasic, que permite una depuracin mucho mas facil y rpida. DEBUG (no viene con W95/98, hay que recuperarlo de DOS 6) .Es un editor hexadecimal con alguna capacidad de ensamblador que permite ser comandado desde la entrada standard, es decir puede recibir ordenes redirigidas desde un batch. Del entorno UNIX nos vienen algunas aplicaciones muy potentes, que permiten extender SED Es un editor de texto en batch. Es capaz de modificar automticamente un conjunto de ficheros de texto, segun las ordenes de un conjunto de macros. Cuando se necesita un formateo especial AWK Lee ficheros de texto formateados y procesa las entradas como campos y registros En Windows tenemos aplicaciones capaces de ser mandadas desde un batch La aplicacin TELNET de windows est mandada por scripts, que pueden proceder de un fichero bat Ficheros INF . Estos ficheros de texto permiten automatizar las modificaciones de registro de Windows en los programas de instalacin. El estudio del registro de Windows sobrepasa los limites de esta pgina