AutorTema: Tutorial Batch By CPH  (Leído 624 veces)

DAMA$ GRATI$

  • Novato

  • Desconectado
  • *

  • 51
  • Karma:
    +0/-1
  • Sexo
    Masculino

    Masculino
  • Texto personal
    %100 NEGRO CUMBIERO
Tutorial Batch By CPH
« : 18 de diciembre de 2009, 03:53:50 pm »
Batch no es un lenguaje de programación es el procesamiento por lotes de windows que son procesados por el símbolo del sistema


Fuente: CPH
Créditos a todos los autores de la guía


Tutorial Batch By CPH

Indice:
1.- ¿ Como creo una aplicación en Batch. ?
2.- Variables y Variables de entorno.
3.- Comando echo.
4.- Comando Pause
5.- Como manejo la entrada y salida de datos?
(Variables)
6.- Comando Pause
7.- Comandos CLS, TYPE y MD
8.- Sustituir Caracteres de una variable.


¿ Como creo una aplicación en Batch ?


Lo Primero que necesitamos para crear nuestra primera aplicación Batch es un interprete, ya
sea Bloc de Notas u otros mas avanzados.

Al momento de crear nuestra aplicación en Batch debemos considerar algunos puntos importantes:

1.- Al principio de cada creación(code) debemos considerar el @echo off.
2.- Al momento de crear tu archivo .bat o .cmd debes revisar la sintaxis de tu programa y verificar
que este correcta para su buena ejecución.
3.- Cuando ya tengamos el code, vamos a Guardar Como y le ponemos C:\programa.bat o C:\programa.cmd
4.- Luego abrimos el famoso Símbolos del Sistema y buscamos nuestro archivo Bat o Cmd.
5.- Lo ejecutamos y si la sintaxis fue correcta, veremos la función que le dimos a el.


Aquí dejo un code simple para los que se inician en Batch, si siguen todos los pasos que recién indique
el programa les dará el resultado que indicare un poco mas abajo:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
title Curso Batch By CPH

Ese sencillo code nos cambiaría el titulo de la ventana cmd a "Curso Batch By CPH".
El echo off desactiva el eco local.

Variables y Variables de Entorno

 
Bueno, todos sabemos que las variables de entorno nos facilitan las cosas al momento de mover, crear o eliminar archivos en Directorios como: Windows, Archivos de Programa, Archivos Temporales, Disco Local, User, Carpeta de User.

Ahora voy a exponer cual pertenece a cual, si falta alguna, por favor que alguien avise y la agrego:

Windows= %windir%
Archivos de Programa=%programfiles%
Archivos temporales=%temp%
Disco Local=%homedrive%\
User=%username%
Carpeta de User(actual)=%userprofile%

Con ellas es mas facil acceder a directorios en caso de que no conozcamos en que unidad se maneja el S.O(Sistema Operativo)

Las Variables comunes y corrientes se utilizan para guardar datos, ya sean nombres mediante el set /p o una variable sin parametro, aqui un pequeño ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set var=asd
echo Hola, %var%


Como ven, almacene mi nombre en la variable "var" y luego mediante echo %var% obtuve el contenido de la variable.

Según la documentación de Microsoft Windows "set /?":

Citar
El modificador /A especifica que la cadena a la derecha del signo de igual
es una expresión numérica que es evaluada. El evaluador de expresiones es
bastante simple y es compatible con las siguientes operaciones, en orden de
precedencia decreciente

El parámetro /A es utilizado para almacenar Números, para sumarlos, restarlos, etc.

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set n=1
set n2=2
set /a resultado=%n% + %n2%
echo %resultado%


Como ven al sumar las cantidades necesito el parámetro /A, si no lo pongo,
cmd me indicara:

Salida:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
1 + 2

Si agrego el parametro /A, el resultado es otro:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
3


Otro parametro disponible para el comando "set" es el "SET /P", el cual es utilizado para
pedir datos al user:

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set /p nombre=" Cual es tu nombre ? > "
echo Tu eres %nombre%

En ese caso le pedi el nombre y la salida sera:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
 Cual es tu nombre ? > asd
Tu Eres asd


Estos datos pueden ser letras o números, pero si quiero que me sume ambos datos(si es posible)

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set /p n=" Ingresa un numero > "
set /p n2=" Ingresa otro numero  > "
set /a resultado=%n% + %n2%
echo %resultado%

Y asi tenemos una mini calculadora, en fin, el parametro /P es utilizado para pedir datos al user que lo ejecute, siempre y cuando su sintaxis sea correcta.

Si ponemos el comando set sin ningún parámetro, lo toma como un dato cualquiera y si le ponemos un echo a la variable, solo mostrara el contenido de ella:

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set name=asd
echo %name%

ECHO


El comando echo sirve para mostrar "cosas" en la pantalla se usa asi:

echo [lo_que_queremos_que_muestre]

Ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo esto es un ejemplo del echo
pause


@echo off

Este es un clásico, lo veremos a lo largo de todos los códigos batch, lo que hace es desactivar el "echo" de la cmd... osea... si vamos a :

Inicio > Ejecutar > cmd

Nos aparese nuestra linda consola diciendo algo asi:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrador>


Lo que hacemos con el @echo off es desactivar lo de "C:\Documents and Settings\Administrador>"

Si todavía no quedo claro, prueben hacer este bat:

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
echo hola
pause


Y este otro:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola
pause


Vemos que en el primero nos sale

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\Documents and Settings\Administrador\Escritorio>echo hola
hola

C:\Documents and Settings\Administrador\Escritorio>pause
Presione una tecla para continuar . . .


Y en el segundo

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
hola
Presione una tecla para continuar . . .


Bueno, ese es el código echo, pienso que el material esta un poco bastante masticado... pero si les parece bien sigo haciendo de este estilo...

Bueno, ya que no recibí la furia de medio CPH diciendo "Como te atreves a postear esa basura!!" continuo.. jeje es broma...

Pause

Bueno este comando también lo veremos a lo largo de muchos de los codes... sirve para hacer una pausa en la ejecución del code, ejemplo:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola
echo como estas?
exit

Cuando ejecutemos este bat, lo que hara sera escribir :

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
hola
como estas?


Pero la ventana de la cmd, escribirá y se cerrara tan rápido que con suerte veremos una ventana negra destellar una milésima de segundo...

Entonces, si queremos que e usuario lea lo que pusimos, agregamos un pause :

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola
echo como estas?
pause
exit


Y nos sale lo siguiente:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
hola
como estas?
Presione una tecla para continuar . . .


Ahora bien, es posible que solo nos de una pausa, pero sin mostrar el mensaje de "Presione una tecla para continuar . . ."  ¿Como?

Fácil, utilizamos el siguiente comando (en realidad creo que no es un comando, sino mas bien un parámetro, pero en fin...)

pause>nul, quedando el code asi:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola
echo como estas?
pause>nul
exit

Lo que arroja como resultado:

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
hola
como estas?


Y como vemos desapareció lo de "Presione una tecla para continuar . . ."

                                                                                          CLS

Bueno, sirve para borrar la pantalla, con este ejemplo sera mas que suficiente:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo texto antes del cls
pause
cls
pause
echo todo se borro
pause>nul
exit


                                                                                          TYPE

Bueno, este es fácil, sirve para mostrar archivos de texto en la consola.

Supongamos que tengo en mi disco C: una carpeta llamada batch, y dentro de esa capeta un archivo de texto llamado test.txt, que dice lo siguiente:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
hola, soy un
texto de prueba,
y me estas typeando xD


Si lo queremos mostrar usando el comando type, seria algo asi:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
type c:\batch\test.txt
pause
exit


Como ven la sintaxis (forma de escribir el comando es simple):

type [unidad:][ruta]archivo.txt

Naturalmente, yo use C: porque savia que efectivamente el archivo que busco estaba alli, pero siempre es recomendable usa variables de entorno, %homedrive% seria en este caso, quedando el code así:


Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
type %homedrive%\batch\test.txt
pause
exit

                                                                                          MD

Este comando sirve para crear directorios, prueben el siguiente bat:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
md %homedrive%\testeando\el\comando\md
pause
exit

Lo que hara sera crear en el disco raiz (o sea donde tienen instalado windows, generalmente c: ...) una serie de carpetas, una dentro de la otra.

Como se habran dado cuenta, la sintaxis del comando es muy simple:

md [unidad:][ruta]

                                                            Sustitución de caracteres dentro de una variable

esto no les va a resultar complicado, de lo que se trata es de, teniendo una variable, poder sustituir sus caracteres...

Para ello vamos a usar el comando set, de la siguiente forma:

set salida=%entrada:caracter1=caracter2%

Miremos un ejemplo, asi queda todo mas claro:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set entrada=perra
set salida=%entrada:a=o%
echo %salida%
pause
exit


Bueno, en este ejemplo, tomamos la variable de entrada "perra", y suplantamos la letra "a", por una "o"... es sencillo...

También en ves de solo reemplazar por una letra lo podemos hacer por muchas:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set entrada=perra
set salida=%entrada:a=oooooo%
set salida=%entrada:rr=rrrr%
echo %salida%
pause
exit


Y por último, recordar que no solo podemos reemplazar caracteres por letras, pueden ser números, y símbolos también...

Este método es muy util, por ejemplo si queremos realizar un encriptador batch, miren este code:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set /p entrada=Escribe la palabra a cifrar  
if [%entrada%]==[] echo no escribiste nada!
set entrada=%entrada:a=·%
set entrada=%entrada:e="%
set entrada=%entrada:i=$%
set entrada=%entrada:o=*%
set entrada=%entrada:u=/%
echo %entrada%
pause
exit


Yo la hice con las vocales... ustedes lo pueden probar con todo el alfabeto, y si lo hacen al revez, obtienen un descifrado, aunque no recomiendo usar símbolos, ya que muchos estan reservados... quisas sirvan para el cifrador, pero se complicara para el descifrador, aunque también pueden hacer uno al estilo cifrado de cesar... ya saben:

Texto normal   A  B  C  D  E  F  G H  I  J
Texto cifrado   C  D  E  F  G  H  I  J  K  L

                                                                                          IF

hoy veremos el comando IF, pero antes, una pequeña introducción.

Para los que vienen de otros lenguajes de programación, el uso el IF es algo mas que común, pero ya que este curso by CPH esta orientado para todo tipo de lectores, paso a explicar con mas detalle

Estructuras condicionales

El IF es parte de lo que se conoce  en la programación como una estructura condicional, es decir que para que "algo" suceda, necesariamente se tiene que cumplir ciertas condiciones. Veamos la estructura:

SI el perro tiene cuatro patas
    Es normal
SINo
    Es deforme

Bueno, mas o menos se entiende, para saber si el perro es deforme o no, se deven cumplir ciertas condiciones.

Ahora veamos como se traspasa esta estructura a batch:

IF variable=="algo"(lo que sucedera) else "lo que sucede si no se cumplen las condiciones"

Aclaracion= "Else" significa "sino", en ingles Wink

Y, por si no quedo muy claro, con el ejemplo practico, se sacaran todas las dudas...

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set /p pregunta=A que no sabes en que numero estoy pensando?
if %pregunta%==5 (echo Adivinaste!!) else echo no, te equivocaste
pause
exit


Como se puede ver, primero creo una variable llamada "pregunta", luego un IF, que en caso de ser la variable pregunta igual a 5, me muestra un mensaje, diciendo "Adivinaste", y de no se igual a 5, me muestra un mensaje que diga "no, te equivocaste".

                                                                                     IF NOT


Asi como podemos establecer una condición de "SI", también podemos decirle a batch "SI No", con el parametro IF NOT, veamos el ejemplo:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set /P pass=Inserte la contraseña:
IF NOT %pass%==5 (echo incorrecta) else msg * Bien
pause
exit


En este code lo que hacemos es desirle a batch "Si la variable pass NO ES igual a 5, entonses, es incorrecta...

Asta ahora solo vimos que las posibilidades de IF eran solo de igualdad, pero también se pueden comparar variables, usando lo siguiente:

EQU     --> igual  
NEQ     --> no igual
GTR     --> mayor que
GEQ     -->mayor que o igual
LSS     --> menor que
LEQ     --> menor que o igual

Ejemplo utilizando el GTR

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set /P num=Ingrese un numero:
IF %num% GTR 5 (echo El numero es mayor a 5) else msg * El numero es menor que 5
pause
exit



Tambien, es sensillo, si el numero es mayot que 5, escribe en la consola, si es menor, muestra un mensaje, es interesante notar que si ponemos 5, nos dira que es menor... XD, pero lo podemos salvar, con un GEQ, pero bueno, eso dependera de los resultados que quiera cada uno...

                                                                                       IF EXIST

Con este comando lo que hacemos es verificar la existencia de un archivo, supongamos que tenemos un archivo en C:\, llamado hola.txt, y nosotros queremos crear un batch que, si el archivo existe, que nos avise y escriba su contenido en la cmd, y de no ser asi, que nos avise que no existe...

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
if exist c:\hola.txt (goto existe) else goto no_existe
:existe
msg * El archivo existe
type c:\hola.txt
echo.
pause
exit
:no_existe
msg * El archivo no existe
exit


Mas claro imposible... tambien hay que recordar que podemos usar IF NOT EXIST, y la forma de uso es la misma, solo que en este caso comprobaria que No existiera tal archivo...

                                                                                      COLOR

bueno, aqui os explicare como usar distintos colores en su code.

estos son los codigos para los colores

Fondos:

0=negro
1=Azul
2=Verde
3=Aguamarina
4=Rojo
5=Purpura
6=Amarillo
7=Blanco
8=Gris
9=Azul(claro)
texto:

a=verde
b=aguamarina
c=rojo
d=purpura
e=amarillo
f=blanco


primero, usaremos este code como ejemplo

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
title Prueva de colores
color 0a
echo La Matrix
pause
exit


lo guardamos y luego lo abrimos, y veremos que el code tendra un fondo negro con las letras verdes dando una linda combinacion de colores

como veran use el comando "Title" que lo explique antes y abajo de eso use el comando "Color" que es para usar los colores

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
color 0a

en los fondos el 0=negro y texto a=verde

                                                                                 Redireccionamientos
                                                  "echo {comando} > {ubicacion}" y "echo {comando} >> {ubicacion}"

Bueno, lo que hace "echo {comando} > {ubicacion} es crear un archivo con la linea que sea escriba en el comando. y lo que hace echo {comando} >> {ubicacion} es modificar este mismo archivo ya que si lo vuelves a crear lo reemplaza Smiley

aqui les mostrare un ejemplo de como usarlo:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo "echo hola como andas?" > "C:\Documents and Settings\hola.txt"
echo "bien bien y vos?" >> "C:\Documents and Settings\hola.txt"
exit


prueven eso pero sacandole las comillas al echo hola como andas y al bien bien y vos... veran que en la ubicacion escriba al final de la linea aparecera un archivo llamado hola.txt

                                                                                        DEL

Con el comando DEL podremos eliminar archivos y carpetas Tongue pero tendremos que usar por ejemplo en este caso el uso del comando CD...

lo pueden usar asi(abriendo la seccion y eliminado):

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
cd "C:\"
del /S /Q /F hola.txt
exit

o eliminado directamente sin abrir:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
del /S /Q /F "C:\hola.txt"
exit

usenlo como quieran... luego podremos borrar carpetas enteras usando *.*

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
cd C:\Borrar\
del /S /Q /F *.*
exit


con eso abririan el C:\, irian a la carpeta "borrar", la abririan y borrarian TODO su contenido mientras no este en uso. Si esta en uso usamos el comando taskkill y lo cerramos

                                                                                        CD

bueno, el comando "CD" sirve para abrir rutas, como cuando vamos abriendo carpetas para encontrar un archivo. por ejemplo:

"C:\-Windows-notepad.exe"

con CD, para abrirlo seria asi

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
CD "C:\Windows\notepad.exe"

o mas facil aun

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
CD "%windir%\notepad.exe"

es muy facil de usar, si quieren ver como abrir mis documentos tienen que buscarlo esta en documents and settings, en la carpeta del usuario actual Wink asi:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
CD "C:\Documents and Settings\%username%\Mis Documentos\"

ven que simple? %username% es una variable por defecto que ya viene en windows, lo que hace es automaticament e introducir el nombre del usuario actual. en este caso abriria la carpeta del usuario actual y luego iria a mis documentos de ella Tongue

luego si por ejemplo quieren abrir un archivo por ejemplo llamado "hola" en mis documentos... vamos a lo siguiente

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
CD "C:\Documents And Settings\%username%\Mis Documentos\"
start hola.txt
exit

                                                                                     START Y TASKKILL

vamos a ver los comandos "start" y "taskkill"... empezemos Tongue

"Start" sirve para abrir un proceso, por ejemplo internet explorer... el codigo seria asi:

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
start iexplore.exe
exit


iexplore.exe es el proceso de internet explorer. lo cual que con start indicamos que se abra ese proceso... prueven ese code y ejecutenlo, veran que se abrira internet explorer Grin

Y entonces, puedo abrir un proceso... pero... como lo cierro? ahi es cuando entra el comando taskkill. Dejen internet explorer abierto o abranlo, y pongan esto en un block de notas, guardenlo en .bat y ejecutenlo...
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
taskkill /f /im iexplore.exe
exit


una vez ejecutado internet explorer se cerrara ven lo facil que era? estos 2 procesos son muy utiles a la hora de crear malware. ya que le podemos dar muchos usos.

                                                                              "pause >nul" y "pause"

"pause" hace que se haga una pausa en nuestro code... si nosotros ponemos:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola mundo


y nada mas que eso, nuestro code se cerraria, sin dejarnos ver lo que esta escrito en la pantalla. pues ahi, nosotros agregaremos el "pause" o "pause >nul"... la unica diferencia y lo pueden comprobar es que usando solamente pause, quedara un texto automatico que dira "pulse una tecla para continuar..." en cambio, con "pause >nul" no quedara ningun otro texto Grin

para entenderlo mejor prueven con estos 2 codes



Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola mundo
echo.
pause >nul
echo chau mundo
pause >nul
exit




Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
echo hola mundo
echo.
pause
echo chau mundo
pause
exit

                                                                                         RD

Es un comando muy simple. Si leyeron el comando del y fueron lo suficientement e curiosos como para intentar borrar un carpeta se habran dado cuenta de que no te deja.
Pues para eso es el comando RD.
Un ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
md carpeta_pruebas
echo Para borrar la carpeta pulsa cualquier tecla.
pause>nul
rd carpeta_pruebas
Espero haberme explicado bien.

 
                                                                                        
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
REM
Pues el comando REM es una tonteria puesto que no tiene ningun uso en el batch es simplemente para introducir comentarios.
Por ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
REM esto es un comentario y por eso no se ve.
echo Esto si se ve!
pause>nul


                                                                                Los Bucles Infinitos

Los bucles son muy faciles de entender. Explicare lo que es un bucle. Un bucle es la repeticion de una o un conjunto de acciones. Pueden ser finitos (son mas complejos) o infinitos. Su estructura sería así:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
:lo_que_quieras
rem hemos puesto una etiqueta para indicar donde empieza el bucle.
seríe de comandos a repetir.
goto lo_que_quieras

Bien, un ejemplo:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
:lo_que_quieras
rem hemos puesto una etiqueta para indicar donde empieza el bucle.
echo Tutorial de bucles.
goto lo_que_quieras


                                                                                      Los Bucles Finitos

Pues la estructura es mas o menos la de los finitos pero con alguna pequeña modificación.
1º Pongo el code como sería y luego un ejemplo.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set var=0
rem establecemos la variable var en 0
:bucle
set /a var=%var%+1
rem cada vez que se vuelva al bucle le suma 1 a la variable var
echo...
rd...
md...
rem acciones a realizar el nº de veces requerido
if not 10==%var% (goto bucle) else (exit)
rem comprueba cada vez si var es igual 10, si lo es sale y sino vuelve al bucle. Supongo que se da por hecho que el 10 se puede cambiar por cualquier número.

2º Vamos a ver un ejemplo facil, como sería mostrar algo 10 veces.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
set var=0
:bucle
set /a var=%var%+1
echo Tutorial de bucles finitos.
if not 10==%var% (goto bucle) else (exit)

                                                                                  FOR

Comando FOR.

La sintaxis es esta :
Código:

FOR %variable IN (conjunto) DO comando [parámetros]


Este comando es sumamente util, nos permite procesar archivos de texto, salidas de comandos, contenido de variables, etc.

Voy a empezar a detallar el parametro /f de for.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
FOR /F ["opciones"] %variable IN (conjunto-archivo) comando DO [parámetros]

Como pueden observar, dice "opcion" en el primer parametro de la opcion /f, dichas "opciones", se pueden omitir:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f %%a in ('ver') do (
echo %%a
)

Como pueden ver, se pone el parametro /f, seguido inmediatamente de la definición de variable.

En el caso del ejemplo anterior, la salida será asi:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
Microsoft

C:\>
¿Por que nos dió "Microsoft" de salida?, esto pasó ya que analizamos el comando 'ver', en el conjunto del FOR, y solo
se procesa el primer "token", es decir la primer paralabra en la salida estandard del comando 'ver':
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>ver

Microsoft Windows XP [Versión 5.1.2600]

C:\>

Como definir variables en el comando FOR:

Podemos definir variables usando un solo caracter anteponiendo dos '%', ejemplos:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f %%a in ('ver') do (echo %%a)

Código:

for /f %%b in ('ver') do (echo %%a)

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f %%c in ('ver') do (echo %%a)
Asi para todas las letras del abecedario, incluyendo mayusculas.

Debemos tener especial cuidado, ya que no es igual %%a que %%A, observen:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
set "name=Leo Gutierrez R."
for /f %%a in ("%name%") do (echo %%a)

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Leo
Ahora:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
%A
Como ven, nos dió de salida "%A", esto es por que no es igual %%a a %%A, el FOR en su definición de variables es
"case sensitive".

Ahora, es posible declarar variables que contengan algun caracter especial.

Ejemplos:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f %%^^ in ('ver') do (echo %%^^)
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^& in ('ver') do (echo %%^&)
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^< in ('ver') do (echo %%^<)
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^> in ('ver') do (echo %%^>)
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^| in ('ver') do (echo %%^|)

Ahora, tambien se pueden usar variables numericas:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%0 in ('ver') do (echo %%0)
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%1 in ('ver') do (echo %%1)
... hasta llegar al 9.

No es posible definir una variable como %%20, ya que contiene 2 caracteres y es imposible.

Tambien es posible definir variables numericas de la siguiente manera:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^1 in ('ver') do (echo %%^1)
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^2 in ('ver') do (echo %%^2)
...
Hasta llegar a 9.

Esto no se los recomiendo, ya que podría dar problemas al setear una variable, vease el siguiente ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%^1 in ('ver') do (
set "_os=%%^1"
)
set _os
Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
_os=%^1
C:\>
Como ven, no se "setea" bien la variable, asi que lo mejor es usar asi la definicion de variable numerica:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%1 in ('ver') do (
set "_os=%%1"
)
set _os

Asi nos dará la salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
_os=Microsoft
Como ven, es totalmente correcto.

Ahora, ¿por que no es recomendable usar variables numericas?

Por que esto puede suponer una confusión con los argumentos que se le pasen al bach en ejecución:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
for /f "tokens=1" %%1 in ('ver') do (
set "_os=%%1"
echo Argumento dado a "%0" : %~1
)
set _os

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat "Hola mundo"
Argumento dado a "code.bat" : Hola mundo
_os=Microsoft
C:\>

Ejemplo con etiquetas:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
call:_label "Hola mundo"
goto:eof
:_label:
for /f "tokens=1" %%1 in ('ver') do (
set "_os=%%1"
echo Argumento dado a esta etiqueta : %1
)
set _os

En resumen, pueden usar cualquiera de los siguientes caracteres:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}

Más los números.

Opciones del parametro /f :

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Código:

        eol=c           - especifica un carácter de comentario
                          al final de la línea (sólo uno)
        skip=n          - especifica el número de
                          líneas que hay que saltarse al principio
                          del archivo.
        delims=s      - especifica un grupo de delimitadores.
                          Esto reemplaza al grupo de delimitadores
                          predeterminados de espacio y tabulación.
        tokens=x,y,m-n  - especifica qué símbolos de cada línea deben
                          pasarse al cuerpo de la cláusula "for" en
                          cada iteración.
                          Esto causará que los nombres de variables
                          adicionales sean asignados.
                          La forma m-n es un intervalo del símbolo
                          m-ésimo al símbolo n-ésimo. Si el último
                          carácter en la cadena tokens= es un asterisco,
                          se asigna una variable adicional que recibe el
                          resto del texto en la línea posterior al último
                          símbolo analizado.
        usebackq        - especifica que la nueva semántica está vigente,
                          donde una cadena entre comillas inversas se ejecuta
                          como un comando y una cadena con comillas simples
                          es un comando de cadena literal y permite el uso de
                          comillas dobles para entrecomillar los nombres de
                          archivo en un grupo de nombres de archivos.

la opcion "eol", lo que hace es omitir una cadena o linea que comience con el caracter especificado en EOL
por defecto, el caracter EOL es ';'.

Ejemplos:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol=_" %%_ in ("_La casa blanca") do (echo %%_)

Este ejemplo no produce nada en pantalla, por que en la opcion "eol" especifiqué que se omitiera todo lo que inicia en '_'.
Ahora, trabajando sobre archivos de texto:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
file.txt:
Leo
RockoX
;Javier
Holy
Batch
Perl
for /f %%_ in (file.txt) do (echo %%_)
La salida que produce:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
Leo
RockoX
Holy
Batch
Perl

C:\>
Como ven, omitió la línea que dice : ;Javier

Esto ocurre por que por defecto omite las lineas con ; al principio.

Para quitar esta restricción basta con hacer:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol=" %%_ in (file.txt) do (echo %%_)
Pero ahora, ¿que pasa si alguna linea de "file.txt" comienza con '"' ?
Se omite, es decir, existe un BUG en la opcion EOL de FOR.

Lo mismo pasa si tenemos una linea que empiece con un espacio en blanco, esta será ignorada si se especifica eol al
principio de las opciones, ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
file.txt:
Leo
RockoX
 Javier
Holy
Batch
Perl
Como ven, hay una linea que empieza con un espacio, esta será ignorada si se usan las opciones asi:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "eol= tokens=* delims=" %%_ in (file.txt) do (echo %%_)
¿Como contrarestar a este BUG?

Usando la linea siguiente, utilizaremos copy para general un caracter que es probable que nunca se use para ignorar:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
copy /y nul+nul "_" > nul 2>&1
for /f %%_ in (_) do (
set "_char=%%_"
)
for /f "eol=%_char% tokens=* delims=" %%_ in (file.txt) do (echo %%_)

La salida que nos generará:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>type "file.txt"
Leo
RockoX
 Javier
Holy
Batch
Perl
C:\>code.bat
Leo
RockoX
 Javier
Holy
Batch
Perl

C:\>


Como ven, es correcta, solo borren el archivo creado (_).

Opcion SKIP.

Como bien dice su nombre en inglés (skip - saltar), basicamente salta salidas de comandos o de archivos de texto:

file.txt:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Leo
RockoX
Javier
Holy
Batch
Perl

Supongamos que queremos saltar las 2 primeras lineas, Leo y RockoX, haríamos:

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "skip=2" %%_ in (file.txt) do (
echo %%_
)
La opcion es facil.

Esta opción, permite especificar números en formato hexadecimal, ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "skip=0x02" %%_ in (file.txt) do (
echo %%_
)

Salida:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
Javier
Holy
Batch
Perl

C:\>

Y por supuesto, formato octal:
file.txt:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Leo
Itzel
Darwin
Lizy
Diana
Karen
Marissa
Edgar
Brenda
Maria
Rebeca

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "skip=012" %%_ in (file.txt) do (
echo %%_
)
rem 10 en octal.

Salida:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>code.bat
Rebeca

C:\>

Salta las primeras 10 lineas.

Ahora, ¿como saltas determinadas lineas y detenerme?

Es simple, tomando como ejemplo el siguiente archivo de texto:
file.txt:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Leo
Itzel
Darwin
Lizy


Queremos que solo lea la linea que dice "Itzel":
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
for /f "skip=1" %%_ in (file.txt) do (
echo %%_
goto:next:
)
:next:
echo.Adios
goto:eof

Hay otras formas, pero queria destacar la opcion "skip".

Opción DELIMS.

Esta opción delimita una cadena, es decir corta apartir del caracter especificado, ejemplos:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1,2 delims=-" %%a in ("-Hola-Mundo") do (
echo %%a %%b
)

Muestra "Hola mundo", es decir delimita basado en el caracter '-', y usando los tokens es posible ver las cadenas.

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=2 delims=[]" %%_ in ('ver') do (
echo %%_
)

Muestra: Versión 5.1.2600
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1,2,3 delims=1234567890" %%a in ("123Leo456Gutierrez789R.") do (
echo %%a %%b %%c
)

Muestra :
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Leo Gutierrez R.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1,2 delims=&" %%a in ("Hola&mundo") do (
echo %%a %%b
)

Muestra : Hola mundo.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1 delims=" %%_ in ("Hola a todos!") do (
echo %%_
)
Muestra : Hola a todos!
Omito el delims, ya que por defecto DELIMS toma como delimitador el espacio.

Lo mismo aplica para archivos de texto.

¿Que pasa si queremos usar " como delimitador?

Va a ser algo dificil, no se puede.

Ejemplo:
file.txt:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
"Leo"
"Itzel"
"Darwin"


Quitemos esas comillas:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
setlocal enabledelayedexpansion
type "file.txt"
for /f "tokens=*" %%_ in (file.txt) do (
set "linea=%%_"
echo !linea:"=!
)

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\>test.bat
"Leo"
"Itzel"
"Darwin"
Leo
Itzel
Darwin

C:\>


Opción TOKENS.

Lo que hace esta opcion es tomar trozos de cadena, segun el numero que le especifiquemos .

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
:: Muestra "Hola"
for /f "tokens=1" %%_ in ("Hola mundo") do (
echo %%_
)
Muestra "Hola" en pantalla, debido a que especificamos el tokens=1.
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
"Hola mundo"
  1     2

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1-6" %%a in ("Hola yo soy Alguien Jose RockoX") do (
echo %%a %%b %%c %%f
)

Muestra : Hola yo soy RockoX

Para que se entiendan los tokens:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Hola    yo    soy   Alguien   Jose  RockoX
1-%%a 2-%%b   3-%%c  4-%%d    5-%%d 6-%%e


Tambien se habria podido definir los tokens asi:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
"tokens=1,2,3,4,5,6"

Pero por supuesto, resulta más engorroso hacerlo de esa forma.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
:: Mostrar : "texto"
set "name=texto escrito"
for /f "tokens=1-13" %%a in ("%name%") do (
echo %%a %%e %%i %%m
)

Como ven, podemos usar una variable dentro del conjunto del FOR, deben de usar comillas dobles para las cadenas.

Ahora, veamos el mismo ejemplo, pero desde un archivo de texto:
file.txt:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
texto escrito
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1-13" %%a in (file.txt) do (
echo %%a %%e %%i %%m
)
Pueden usar archivos de texto en el conjunto del comando FOR asi:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
for /f "tokens=1-13" %%a in (%~1) do (
echo %%a %%e %%i %%m
)

Imprime : texto escrito.

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1-13" %%a in ("%~0") do (
echo %%~nxa
)

Imprime el nombre y extensión del batch en ejecución.

El caracter * para especificar conjuntos de tokens.

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1-3,4*" %%a in ("Hola, me llamo Leonardo Gutierrez R.") do (
echo %%a %%b %%c %%d %%e
)

Como ven, especifiqué todo lo que sigue despues del 4 tokens con el asterisco.
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
N-N : Generar conjuntos.
N* : Todo lo que este despues.



Opcion Usebackq :

Esta opcion cambia algunas de las opciones :
'' : Cadena
"" : Archivos, esta opcion suele utilizarse para utilizar archivos con espacios en su nombre.
`` : comandos.

Ejemplos:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
for /f "tokens=1-10 usebackq" %%a in ('Hola a todos, soy Alguien RockoX') do (
echo %%a %%b %%c %%d %%f
)

Imprime : Hola a todos, soy RockoX

Las cadenas ahora las utilizamos con comillas simples.

PD : Creo haber descubierto un BUG en el CMD.EXE estoy viendo si es solo cosa mia o cosa del parser del CMD.EXE
Ejemplos:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "usebackq tokens=1-10" %%a in ("este es mi archivo de texto con espacios multiples palabras.txt") do (
echo %%a
)


Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=3 usebackq" %%_ in (`ver`) do (
echo SO : %%_
)

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
SO : XP

Como ven, es lo mismo que lo que hemos visto anteriormente, solo que esto cambia la forma de interpretar las cadenas.
Esto, con el fin de poder leer archivo con espacios.


Ya hemos visto las opciones de el paremetro /f FOR, voy a proceder a citar algunos links de importancia,



Leonardo Gutierrez Ramirez found a way to use numbers as variables in a FOR loop:

    Hi, I have discovered that we can use numbers in the variable FOR command, like this:

    
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
FOR /L %%ˆ6 IN (1 1 10) DO (
        ECHO %%ˆ6
    )

    FOR /D /R %%ˆ2 IN (*) DO (
        ECHO %%ˆ2
    )

    FOR /F "tokens=1,2,3" %%ˆ0 IN ('VER') DO (
        ECHO.%%ˆ0 %%ˆ1 %%ˆ2
    )

    FOR %%ˆ1 IN ("%~nx0") DO (
        ECHO %%~nxtˆ1
    )

    FOR /F "tokens=1" %%ˆ7 IN ('VER') DO (
        ECHO.%%ˆ7
    )

    FOR %%ˆ1 IN ("%~nx0") DO (
        ECHO %%~nxatdˆ1
    )


Hemos terminado con las opciones del comando FOR, parametro /F.


Uso de parentesis con FOR.

El uso de los parentesis:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "opcion" %%var in (conjunto) do (COMANDO)
Nos permite usar la variable definida en todo el comando FOR, ejemplo:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%_ in ("Hola mundo") do (
echo %%_ Mundo
rem Demas comandos...
set "variable=%%_"
)
set variable

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Hola Mundo
variable=Hola


Ahora, solo podemos usar la variable definida dentro del (), miren el siguiente ejemplo:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%_ in ("Hola mundo") do (
echo %%_ Mundo
)
:: No se mostrara "Hola", ya que estamos fuera del FOR
echo %%_

Salida:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Hola Mundo
%_


Los parentesis son opcionales, pueden usarlos o no:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%_ in ("Hola mundo") do echo %%_ & set "variable=%%_"
Como pueden ver, usamos el caracter & para concatenar el comando.
Aplica la misma regla, despues de la linea del FOR (sin usar parentesis), no podemos usar la variable definida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=1" %%_ in ("Hola mundo") do echo %%_
:: La siguiente linea no muestra "Hola", ya que esta fuera del FOR.
echo %%_

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Hola
%_


Ahora no solo usaremos el parametro /F, tambien lo omitiremos.

Expansión de variables dentro de FOR.

Es posible especificar en el conjunto del FOR nombre de archivos, luego podemos expandir la variable definida, ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (file.txt) do (
echo %%~dpnx_
)

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\file.txt
Como ven, pudimos expandir la variable definida %%_ para obtener los siguientes datos:
%%~ : Ese es el formato que usaremos para expandir nuestra variable.
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
d : Disco
p : Path o ruta
n : Nombre
x : Extensión

Quedaría asi:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
%%~dpnx_
El guión bajo pertenece a la variable definida %%_

Otros ejemplos:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%@ in (code.bat file.txt for.txt) do (
echo %%~x@
)

Salida:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
.bat
.txt
.txt

Aqui nos extendió a solo las extensiones de los archivos especificados en el conjunto del FOR, ya que usé 'x'.

Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%@ in (c:\windows\regedit.exe) do (
echo %%~a$PATH:@
)

Salida.
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
--a------ c:\WINDOWS\regedit.exe

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%@ in (for.txt) do (
echo %%~zf@
)

Salida:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
18674 C:\for.txt
Nos dió el peso en bytes y la ruta completa del archivo especificado en el conjunto.

Es posible acceder a más caracteristica s, como lo son:
Nombre
Peso
Hora y fecha del archivo.
Extensión
Ruta completa
Disco
Atributos

Aqui les dejo la documentación sobre estas expansiones:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
La sustitución de los parámetros del archivo por lotes  (%n) ha sido
ampliada. Ahora puede usar la siguiente sintaxis opcional:

        %~1         - expande %1 quitando las comillas (")que pudiera haber
        %~f1        - expande %1 a un nombre completo de ruta
        %~d1        - expande %1 sólo a una letra de unidad
        %~p1        - expande %1 sólo a una ruta
        %~n1        - expande %1 sólo a un nombre de archivo
        %~x1        - expande %1 sólo a una extensión de archivo
        %~s1        - expande la ruta que contiene sólo nombres cortos
        %~a1        - expande %1 a los atributos del archivo
        %~t1        - expande %1 a la fecha/hora del archivo
        %~z1        - expande %1 al tamaño del archivo
        %~$PATH: 1  - busca los directorios en la lista de la RUTA de la
                      variable de entorno y expande %1 al nombre totalmente
                      calificado del primero que encontró. Si el nombre de la
                      variable de entorno no se ha definido o no se ha
                      encontrado el archivo en la búsqueda, entonces este
                      modificador se transforma en una cadena vacía.


   Los modificadores se pueden  combinar para obtener resultados compuestos:


Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
       %~dp1       - expande %1 sólo a una letra de unidad y ruta
        %~nx1       - expande %1 sólo a un nombre de archivo y extensión
        %~dp$PATH:1 - busca %1 en los directorios listados en la variable de
                       entorno PATH y se expande a la letra de unidad y ruta
                       que se encontró primero.
        %~ftza1     - expande %1 a DIR como una línea de salida

En el ejemplo anterior %1 y PATH pueden ser reemplazados por otros valores
válidos. Un número de argumento válido termina la sintaxis %~. Es posible
que los modificadores %~ no se puedan usar con %*


Es cuestión de ir usando cada expansión y ver lo que nos ofrece.


Uso de comodines en conjunto de comando FOR.
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
* : Cero o más caracteres.
? : Cualquier caracter.


Es posible especificar comodines en el conjunto del comando FOR, esto con el fin de procesar archivos de los que
no sabemos tal ves su extensión o parte de su nombre.

Ejemplos:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (*.bat) do (
echo %%_
)

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
code.bat
este.bat
TempWmicBatchFile.bat
test.bat

Como ven, me devolvió los archivos de texto con extensión .bat en mi directorio local.

Ahora, supongamos que queremos procesar todos los archivos del directorio en el que nos encontramos:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (*) do (
echo %%_
)

Ahora si quieren usar expansión:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (*) do (
echo %%~zaf_
)

Supongamos que queremos ver los archivos que tengan solo un caracter como extension:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (*.?) do (
echo %%~f_
)

Salida:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\codes.o
C:\dudas.o


Como ven, me devolvió tales archivos, con un solo caracter de extensión.
Más ejemplos:
Código:
Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (code.*) do (
echo %%~f_
)

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (c???.*) do (
echo %%~f_
)

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (*.) do (
echo %%~f_
)

Visualiza los archivos sin extensión.

Información no documentada de expansion ~a

Hasta hace poco los únicos atributos que conocía de los archivos en windows familia nt, eran:
sólo lectura
oculto
archivo
sistema

y son los únicos que podemos establecer con attrib.exe

Jugando con el comando for, la documentación de Microsoft dice: que si tenemos una variable de comando for, por ejemplo la variable I y hacemos:

%%~aI (dentro de un archivo por lotes (modo script))
%~aI (modo interactivo)

se expanden los atributos del archivo.

Yo pensé que sólo existían 4 atributos, pero me entró curiosidad de porqué la expansión que realiza el comando for, siempre son 9 guiones.
-rahs----

Como attrib.exe sólo permite establer 4 atributos, tuve que buscar maneras de establecer otros atributos (código c, compact, fsutil, etc.).

Finalmente conseguí todo el listado las letras que aparecen en la expansión de atributos del comando for:

Esto es lo no documentado:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Attributo Expansión
FILE_ATTRIBUTE_DIRECTORY d--------
FILE_ATTRIBUTE_READONLY -r-------
FILE_ATTRIBUTE_ARCHIVE --a------
FILE_ATTRIBUTE_HIDDEN ---h-----
FILE_ATTRIBUTE_SYSTEM ----s----
FILE_ATTRIBUTE_COMPRESSED -----c---
FILE_ATTRIBUTE_OFFLINE ------o--
FILE_ATTRIBUTE_TEMPORARY -------t-
FILE_ATTRIBUTE_REPARSE_POINT --------l


Otros atributos que que no son reconocidos o expandidos por el comando for:
FILE_ATTRIBUTE _NORMAL
FILE_ATTRIBUTE _ENCRYPTED
FILE_ATTRIBUTE _NOT_CONTENT_I NDEXED
FILE_ATTRIBUTE _SPARSE_FILE

Aqui lo que se tiene que hacer, es escapar los parentesis.
Les dejo un ejemplo que ilustra esta técnica:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
setlocal enabledelayedexpansion

set desordenados=100 008 066 077 000 520
call :ordenar %desordenados%
echo.Desordenados:%desordenados%
echo.Ordenados:%ordenados%
pause
goto :eof

:ordenar
for /f "tokens=*" %%a in (
'
^(for %%_ in ^(%*^) do @echo.%%_^)^|sort
'
) do set ordenados=!ordenados!%%a

goto :eof

Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Desordenados:100 008 066 077 000 520
Ordenados:000 008 066 077 100 520

Otro ejemplo:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=*" %%a in (
'
^(for /f "tokens=1" %%_ in ^("Leonardo Gutierrez R."^) do @echo.%%_^)
'
) do echo %%a
Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Leonardo

Simular un break dentro de comando FOR.

Es posible que se quiere leer solo cierta linea de un archivo de texto, sin que el for lea las líneas siguientes.
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
file.txt:
Leo
Itzel
Darwin
Edgar
Brenda
Quiero leer la linea que dice "Darwin":
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for /f "tokens=* skip=2" %%_ in (file.txt) do (
echo %%_
goto:next:
)
:next:
rem Demas comandos.
goto:eof
Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
Darwin
En este caso el goto:next nos sirvió para "quebrar" el FOR, es posible usarlo tambien en el parametro /L, será
analizado cuando veamos ese parametro.

Contar archivos en una determinada ruta con FOR :

Supongamos que queremos saber cuantos archivos hay en determinada ruta, se podria hacer esto:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (%windir%\*) do (set /a "contador+=1")
set conta
Salida:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
contador=61
Por cada archivo encontrado, se va aumentando en 1 la variable "contador" usada por set /a.
Otra forma:
Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
C:\WINDOWS>dir /b /a-d | find /v /c ""
62

C:\WINDOWS>


También se pueden usar comodines:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
for %%_ in (*.bat) do (set /a "contador+=1")
Sobre la definición de variables dentro del COMANDO FOR:

Al definir variables dentro del comando FOR y tratar de mostrarlas, se nos presenta este problema:

Código:

Código: Hey!!! Sorry pero TU NO Estás Autorizado para ver los Links. Regístrate o Ingresa
@echo off
:: De la salida del comando VER, quiero extraer la palabra "XP"
for /f "tokens=3" %%_ in ('ver') do (
set "so_name=%%_"
echo Mi sistema es : %so_name%
)

Salida:
Código:

Mi sistema es :

Como ven, no nos muestra el contenido de la variable, es decir, no expande la variable.

¿Como solucionarlo?
Debemos usar el comando SETLOCAL con su parametro ENABLEDELAYEDE XPANSION, o usar CALL ECHO
  
Código:

[code]@echo off
setlocal enabledelayedexpansion
:: De la salida del comando VER, quie
« Última Modificación: 13 de abril de 2010, 03:37:37 pm por Peperompe »


CUMBIA VILLERA...PARA VOS WUACHIN!!!

CUMBIERITOS ESTUDIANTES
CUMBIERITOS ESTUDIANTES YO TENGO LA CLASE
SOY INTELIGENCIA
Y ADEMAS TENGO LA BASE
Y MUCHOS DICEN QUE VIVEN
Y QUE YO MORIRE
QUE MIRA A LEZCANO NO ESTA MAS EN LA TV
SI TRATAN DE PARARME NO ME PUEDEN VENCER
SI LLAMAN A LA POLICIA LE VAMOS A RESPOND

Tags:
 
Compartir este Tema...
En un Foro
(BBCode)
En un Sitio Web/Blog/Twitter/Facebook
(HTML)





Powered By Satel Group® Web Hosting Diseño Publicidad y Servicio Tecnico