Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch / Bash-Shell

Like Tree11Me Gusta

Tema Cerrado Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 25-feb-2013, 16:59   #16
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.5 Operadores de comparación (o Condicionales)



Este tipo de operadores son exclusivos del comando IF, sin el comando IF no se puede realizar una comparación de este tipo, solamente una comparación que séa por el método de ejecución condicional.

Véamos un ejemplo de todos estos operadores:
Código:
@Echo OFF

IF 1==1 (Echo 1 es igual que 1)
IF 1 EQU 1 (Echo 1 es igual que 1)
IF 1 NEQ 0 (Echo 1 es distinto que 0)
IF 1 LSS 2 (Echo 1 es menor que 2)
IF 1 LEQ 1 (Echo 1 es menor o igual que 1)
IF 1 GTR 0 (Echo 1 es mayor que 0)
IF 1 GEQ 1 (Echo 1 Es mayor o igual que 1)

Pause&Exit
  


Otro ejemplo de comparación:
Código:
@Echo OFF
IF "HOLA" EQU "ADIÓS" (Echo Es igual) ELSE (Echo No es igual)
Pause&Exit
  

NOTA: Los comandos deben ir siempre agrupados como en el ejemplo con los caracteres de agrupación ( ), aunque no es obligatorio, pero de lo contrario empiezan los problemas.
NOTA: Las comillas SIEMPRE, menos cuando intentemos comparar números como en este caso (Sobretodo números de 2 dígitos o más), ya que Batch ordena de una manera incorrecta los números con comillas.
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:59   #17
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.6 Operadores de desplazamiento lógico (o Redireccionamiento)



  • >


Redirecciona la salida de un comando, a un archivo.

Ejemplo:
Código:
Dir /B "%WINDIR%" > "Archivo.txt"
  
El comando DIR oculta la salida del comando y la redirecciona al archivo de texto, reemplazando el contenido del archivo.






  • >>


Redirecciona la salida de un comando, a un archivo.

Ejemplo:
Código:
Dir /B "%SYSTEMDRIVE%" >> "Archivo.txt"
  
El comando DIR oculta la salida del comando y la redirecciona al archivo de texto, escribiendo debajo del archivo, sin reemplazar el contenido.






  • <


Redirecciona el contenido de un archivo de texto, a un comando.

Ejemplo:
Código:
SORT < "Archivo.txt"
  





  • |


Redirecciona la slaida de un comando, a otro comando.

Ejemplo:
Código:
Dir | Find "bytes"
  
El echo del comando DIR pasa al comando FIND el cual filtra esta salida mostrando solamente las lineas que contienen el string "bytes".






Redirección ordinaria de multiples líneas:

Código:
@Echo OFF
(
  Echo 1
  Echo 2
  Echo 3
)>"Archivo.txt"
  





Otros tipos de redireccionamiento ordinario:

Código:
Comando.exe 2> "Archivo"
  
Redirecciona cualquier error del comando al archivo.

Código:
Comando.exe 2>> "Archivo"
  
Redirecciona cualquier error del comando al archivo.

Código:
(Comando.exe)2>  Archivo
  
Redirecciona cualquier error de la CMD al archivo.

Código:
Comando.exe >NUL 2>&1
  
Redirecciona nula del output y cualquier error del comando (Oculta cualquier tipod e salida).

Código:
Comando.exe > "Archivo1" 2> "archivo2"
  
Redirecciona la salida al Archivo1 y cualquier error del comando al archivo2.


NOTA: NUL es un archivo especial de Windows que descarta toda la información que le redireccionemos, prácticamente su único uso es ocultar la salida de un comando evitando la necesidad de crear un archivo extra que nos moleste en nuestro disco duro.


TIP: También se puede redireccionar a un puerto de impresora:
Código:
Type "Archivo.txt" > PRN
  
Código:
Type "Archivo.txt" >LPT1
  





Indice de redirecciones:

0 - Entrada

1 - Salida

2 - Salida de errores

3 - Flujo de archivo de entrada

4 a 9 - Indefinido


Ejemplo:
Código:
@Echo OFF

REM Redirecciona la salida normal
Echo Ejemplo 1> "Ejemplo.txt"

REM Redirecciona una entrada
CMD 0< "Ejemplo.txt"

REM Redirecciona la salida de error
Dir /B FAIL 2> "Ejemplo.txt"

Pause&Exit
  
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
diegox64 (26-feb-2013)
Antiguo 25-feb-2013, 17:00   #18
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.7 Operadores aritmétricos y de asignación



  • =


El operador = sirve solamente para setear, para asignar un valor a una variable.

Ejemplo:
Código:
Set "Variable=Valor"
  
Para usar los demás operadores aritmétricos y de asignación primero hay que activar el parámetro aritmétrico /A del comando SET






  • +


Este es el operador de suma.

Ejemplo:
Código:
@Echo off
Set /A "NUM=2+2"
Echo %NUM%
REM El resultado es 4
Pause >NUL
  





  • +=


Este es el operador alternativo de suma.

Ejemplo:
Código:
@Echo off
SET /A "NUM+=5"
Echo %NUM%
REM El resultado es 5
Pause >NUL
  





  • -


Este es el operador de resta.

Ejemplo:
Código:
@Echo off
Set /A "NUM=2-2"
Echo %NUM%
REM El resultado es 0
Pause >NUL
  





  • -=


Este es el operador alternativo de resta.

Ejemplo:
Código:
@Echo off
Set /A "NUM-=5"
Echo %NUM%
REM El resultado es -5
Pause >NUL
  





  • *


Este es el operador de multiplicación.

Ejemplo:
Código:
@Echo off
Set /A "NUM=5*2"
Echo %NUM%
REM El resultado es 10
Pause >NUL
  





  • *=


Este es el operador alternativo de multiplicación.

Ejemplo:
Código:
@Echo off
SET /A "NUM=2"
SET /A "NUM*=5"
Echo %NUM%
REM El resultado es 10
Pause >NUL
  





  • /


Este es el operador de división.

Ejemplo:
Código:
@Echo off
Set /A "NUM=10/2"
Echo %NUM%
REM El resultado es 5
Pause >NUL
  





  • /=


Este es el operador alternativo de división.

Ejemplo:
Código:
@Echo off
Set /A "NUM=10"
Set /A "NUM/=2"
Echo %NUM%
REM El resultado es 5
Pause >NUL
  





  • %


Este es el operador de módulo.

Ejemplo:
Código:
@Echo off
SET /A "NUM=5%%2"
Echo %NUM%
REM El resultado es 1
REM (=1)  { 5/2 = 2 + 2 resto 1 = 1 }
Pause >NUL
  
NOTA: El operador de módulo hay que escribirlo 2 veces %% si no se usa directamente en la consola.






  • <<=


Este es el operador de desplazamiento aritmétrico izquierdo.

Código:
@Echo off
SET /A "NUM=2<<3"
Echo %NUM%
REM El resultado es 16
REM  (=16)   { 2 Lsh 3 = binario 10 Lsh 3 = binario 10000 = decimal 16 }
Pause >NUL
  





  • <<=


Este es el operador de desplazamiento aritmétrico derecho.






TIP: Se puede usar el separador de expresión con el comando Set /A:
Código:
@Echo off
Set /A "NUMA+=1", "NUMB-=1"
Echo %NUMA% y %NUMB%
REM El resultado es "1 y -1"
Pause >NUL
  

NOTA: Cualquier cálculo con Set /A que de como resultado un número fraccionado se redondeará automáticamente al número integro más bajo.
Por ejemplo Set /A "VAR=10/3" dará como resultado "3"
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
diegox64 (26-feb-2013)
Antiguo 25-feb-2013, 17:00   #19
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.8 Otros operadores



  • @


Este operador lo vemos siempre en la primera línea de un script bat.

Al usarlo, el operador indica a la CMD que séa menos detallada y muestre solamente el output del comando.

Si no ha quedado claro vamos a ver un ejemplo:

Código:
Echo OFF
Pause
  


Como podeis ver en la imagen, la CMD muestra información sobre la intención de ejecutar el comando Echo,
Por eso, además de ocultar el echo en la primera línea de nuestro script, usaremos el operador AT ( [b]@ ) simplemente para que nos oculte esa información.

Otro ejemplo:

Código:
echo comando 1
echo comando 2
@echo comando 3
echo comando 4
Pause
  



El operador [b]@ se puede usar con cualquier comando, pero una vez desactivado el "echo" en la primera línea de nuestro script, es una tontería usar este operador a menos que volvamos a activar el echo ([b]Echo ON).






  • " "


Las comillas dobles (o Quotes) sirven para definir un string y un argumento, y para que el intérprete pueda diferenciar entre una cadena o una variable.

Un ejemplo:
Código:
@Echo off
Set Variable=Valor
Echo %VARIABLE%
Echo "%%VARIABLE%%"
Pause >NUL
  


Como norma general TODAS las cadenas que lleven espacios en el nombre deben encerrarse usando las comillas dobles.

NOTA: Cualquier caracter que esté dentro de las comillas será automáticamente escapado.
NOTA: Como norma general debe existir una cantidad par del operador ", si la cantidad en nuestro script es impar seguramente dará error el código, aunque hay excepciones en algunos casos.

TIP: Si tenemos un comando con una cantidad impar del operador " y estamos usando un editor de código, seguramente este nos resaltará un error de sintaxis en la línea, pero si estamos completamente seguros de que no hemos cometido un error y que la cantidad de comillas debe ser impar entonces resulta molesto que el editor nos resalte el supuesto error. Esto se puede evitar concatenando un comando de comentario seguido de una comilla para redondear la cantidad a pares, así:

Código:
@Echo off
Set Variable=Valor" " " & REM "
Pause >NUL
  





  • ::


Este operador en realidad es el operador : usado para definir una etiqueta, ¿Recuerdas?
Al repetir el caracter dle operador dos veces se puede usar como alternativa al comando REM

Código:
@Echo OFF
REM Soy una línea de ocmentario
:: Yo soy otra línea de comentario
Pause >NUL
  
Al no ser realmente un operador de comentario, puede dar errores en ciertas circunstancias (Dentro de bloques de agrupaciones como FOR) así que es recomendable usarlo fuera de los bloques.






  • %


Este operador sirve para identificar y usar las variables standard, las variables de FOR, y las variables especiales (Variables de argumento).

Código:
%0
%%A
%VARIABLE%
  
NOTA: Como norma general, directamente en la consola el caracter % solo se usa una vez (Incluso al escribir un FOR), pero en un script hay que duplicar el número de veces que se repite este caracter para poder identificarlo %%, y el número de veces que hay que repetir el caracter aumenta según la recursividad del código.






  • !


Este operador se usa para identificar y usar las variables expandidas.

Código:
!VARIABLE!
  
Más adelante explicaré como usarlas.






Los siguientes operadores son consideranos NO conflictivos ya que estos operadores solo son interpretados en ciertos comandos.


  • *


El asterisco, también llamado "comodín" o "wildcard", es un operador de argumento, al usarlo busca cualquier combinación de caracteres.

Ejemplo:
Código:
@Echo OFF
Dir /B /S "*.txt"
Pause >NUL
  
El script buscará cualquier archivo que empiece por cualquier combinación de caracteres y acabe en ".txt"






  • ?


Este es otro operador de argumento, al usarlo buscará cualquier caracter de 1 dígito.

Ejemplo:
Código:
@Echo OFF
Dir /B /S "?.txt"
Pause >NUL
  
El script buscará cualquier archivo que tenga SOLAMENTE un dígito en el nombre y acabe en ".txt", en resumen, buscará: a.txt, z.txt, A.txt, Z.txt, 0.txt, 9.txt, -.txt, etc...






  • .


Este operador representa el directorio actual, y se puede usar con comandos y aplicaciones CLI que acepten rutas como argumentos

Ejemplo:
Código:
@Echo OFF
Dir .\
REM Equivale a "DIR %CD%"
Pause >NUL
  





  • ..


Este operador representa el directorio anterior del actual, y se puede usar con comandos y aplicaciones CLI que acepten rutas como argumentos

Ejemplo:
Código:
@Echo OFF
Dir %WINDIR%\..\
REM Equivale a "DIR C:\"
Pause >NUL
  





  • \


Este operador representa el directorio raíz del disco duro, y se puede usar con comandos y aplicaciones CLI que acepten rutas como argumentos

Ejemplo:
Código:
@Echo OFF
Dir \
REM Equivale a "DIR C:\"
Pause >NUL
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:03   #20
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

5. SINTAXIS






Si has conseguido leer todas las explicaciones de los operadores te doy la enhorabuena porque a pesar de ser el primer tema práctico de este tutorial, en realidad es uno de los más dificiles, todo lo demás te va a parecer fácil ya que una vez domines los operadores solo será cuestión de ponerlos en práctica en los distintos comandos que veámos y con las distintas técnicas que se nos ocurran.

El conocimiento de los operadores es lo que puede diferenciar a un buen programador Batchero de uno de nivel inferior, sobre todo por que con los operadores podremos salir de la mayoría de las situaciones donde sin ellos nos encontrariamos bloqueados, y además los operadores nos aportarán una simplicidad increible a nuestros scripts.

El orden y la forma en la que se escriben y combinan los operadores, los caracteres, las cadenas, y los comandos, es muy importante a la hora de escribir un script,
Un pequeño fallo tipográfico al escribir un caracter o un operador puede darnos muchos quebraderos e cabeza, en esto consiste el concepto de la sintaxis, en el orden de las cosas.



Es hora de descansar un poco, en este tema simplemente haré un pequeño recordatorio de cúal es la manera correcta de escribir los distintos elementos de un Script Batch.






  • " "


Las comillas dobles... al principio pueden ser frustrantes, pero hay que extremar su uso PARA CASI TODO, siempre que puedas úsalas, con el tiempo te acostumbras a encerrar cada cadena, argumento, o variable importante entre comillas.


Código:
@Echo off
Dir C:\Program Files\Windows Sidebar
Pause >NUL
  
Ese script nos marca el siguiente error: El sistema no puede encontrar el archivo especificado.

Como el nombre de la ruta contiene espacios, tenemos que encerrar el argumento con comillas dobles:

Código:
@Echo off
Dir "C:\Program Files\Windows Sidebar"
Pause >NUL
  





  • ^


La exclusión de caracteres, una de las cosas que más errores puede ocasionarte...

Hay que tener en mente cuales son todos los operadores conflictivos de Batch, por conflictivos me refiero a los operadores que no se pueden usar en cadenas sin excluir dicho operador.

Un ejemplo:
Código:
@Echo off
Echo Me & You
Pause >NUL
  


En el ejemplo hago uso del operador [b]& pero no lo estoy haciendo correctamente, debido a las circunstancias tenemos que excluirlo (escaparlo).

Esta es la manera correcta:

Código:
@Echo off
Echo Me ^& You
Pause >NUL
  







  • ( )


La agrupación... cuando veo códigos que no usan agrupación me sangran los ojos, por desgracia mucha gente aprende a programar Batch de esta manera, pero hay que corregirlo cuanto antes.

Aquí vemos algo muy típico, un claro ejemplo de una comparación sin agrupación:

Código:
@Echo off
If 2 equ 2 Echo Es igual & echo ok else echo NO
Pause >NUL
  


¿Ves lo que pasa? Al no agrupar ningún bloque, todo lo que hay a la derecha del comando echo se toma como una cadena.

Hay que agrupar las cosas y ordenarlas correctamente:

Código:
@Echo off
If 2 equ 2 (Echo Es igual & echo ok) else (echo NO)
Pause >NUL
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:03   #21
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

6. VARIABLES




Existen 4 tipos de variables en Batch,

Las variables especiales: %0
Lass variables standard: %VARIABLE%
Las variables expandidas: !VARIABLE!
Las variables de FOR: %%a

Las 4 tipos de variables solamente pueden almacenar datos alfabéticos, numéricos o alfanuméricos.
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:05   #22
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 6.1 Variables especiales (o Variables de parámetro) (o Variables de argumentos)



Las variables especiales son un tipo de variables predefinidas que pueden cambiar su valor constantemente,
Estas son todas las variables especiales:

%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*

En ellas se guarda el orden de los argumentos que le pasemos a nuestro script.

Un argumento es una cadena de caracteres delimitados por un espacio o por comillas dobles, esto quiere decir que una cadena encerrada entre comillas cuenta como un argumento
Código:
"Esto es un argumento"    "Y esto otro argumento"
  
Pero si no usamos comillas, los argumentos se separan por espacios:
Código:
Esto son cuatro argumentos
1       2     3         4
  
La variable %0 no la consideraremos realmente un argumento, porque en ella se guarda la ruta de nuestro script.
Código:
@Echo OFF
Echo %0
Pause >NUL
  


Si usamos una subrutina, el argumento %0 pasa a ser el nombre de la etiqueta de la subrutina, y será el siguiente número de variable (%1) el que realmente empezará a guardar el primer argumento que le pasemos:
Código:
@Echo OFF
call :subrutina "argumento 1"
:subrutina
Echo %0
Echo %1
Pause >NUL
  


Podemos usar la variable especial con comodín %*, esta variable reune todos los argumentos que le pasemos al script:

Código:
@Echo OFF
call :subrutina arg1 arg2 arg3 arg4 arg5
:subrutina
Echo %*
Pause >NUL
  

(El argumento 0 se omite)



Habeis visto que solo existen 10 variables especiales con números, pero descontando la variable %0, nos quedan 9 variables, ¿que pasa si necesitamos usar más de 9 argumentos... si por ejemplo necesitamos usar el arhumento 10?

Bien, pues el valor de las variables especiales se puede desplazar hacia la izquierda son el comando SHIFT, consiguiendo que el valor que había por ejemplo en la variable %3 pase a la variable %2, y el valor de la imaginaria variable %10 pase a la variable %9, entonces ya podremos usar nuestro 10º argumento en la variable %9

Cita:
Iniciado por CMD
Código:
SHIFT /?

Cambia la posición de parámetros reemplazables

SHIFT [/n]

Si las extensiones de comando están habilitadas,
el comando SHIFT admitirá el modificador /n,
el cual informa al comando que empiece a cambiar en el argumento n, en donde n puede estar comprendido entre 0 y 8.

Por ejemplo:
    SHIFT /2

cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.
  
Ejemplo:
Código:
@Echo OFF
call :subrutina a b c d e

:subrutina
Echo Antes del "Left Shift":
Echo arg1 = %1
Echo arg2 = %2
Echo arg3 = %3
Echo arg4 = %4
Echo arg5 = %5

Echo+
SHIFT /1

Echo Despues del "Left Shift":
Echo arg1 = %1
Echo arg2 = %2
Echo arg3 = %3
Echo arg4 = %4
Echo arg5 = %5

Pause >NUL
  



NOTA: El comando SHIFT no afecta a la variable especial %*, esta variable no se puede desplazar.






  • Expansión de variables especiales (o Argumentos) y de variables de FOR


La gran ventaja de las variables especiales y variables de FOR es que pueden ser expandidas para mostrar únicamente los datos que nos interesen, como por ejemplo, el tamaño del argumento, la extensión del archivo, la fecha de modificación, etc.

Esto se realiza usando el operador ~ seguido de uno de los siguientes caracteres (los caracteres se pueden combinar).


%~0 - expande %0 quitando las comillas (") que pudiera haber
%~f0 - expande %0 a un nombre de ruta completo
%~d0 - expande %0 solo a una letra de unidad
%~p0 - expande %0 solo a una ruta
%~n0 - expande %0 solo a un nombre de archivo
%~x0 - expande %0 solo a una extension de archivo
%~s0 - ruta expandida contiene solo nombres cortos
%~a0 - expande %0 a atributos de archivos
%~t0 - expande %0 a fecha/hora del archivo
%~z0 - expande %0 a tamaño del archivo
%~$PATH:0 - busca los directorios de la lista de la variable de entorno de PATH y expande %0 al nombre del primero que se encuentre.


Ejemplo:
Código:
@Echo OFF

Echo Argumento con comillas:
Echo %0
Echo.
Echo Argumento sin comillas:
Echo %~0
Echo.
Echo Ruta completa del argumento:
Echo %~f0
Echo.
Echo Letra de unidad del argumento:
Echo %~d0
Echo.
Echo Ruta del argumento:
Echo %~p0
Echo.
Echo nombre del argumento:
Echo %~n0
Echo.
Echo Extension del argumento:
Echo %~x0
Echo.
Echo Ruta de nombre corto del argumento:
Echo %~s0
Echo.
Echo Atributos del argumento:
Echo %~a0
Echo.
Echo Fecha/Hora dle argumento:
Echo %~t0
Echo.
Echo Tamanyo del argumento:
Echo %~z0

Pause >NUL
  



Código:
@Echo OFF

FOR %%a in (*) DO (

     Echo Ruta:      %%~fa
     Echo Letra:     %%~da
     Echo Carpeta:   %%~pa
     Echo Nombre:    %%~na
     Echo Extension: %%~xa
     Echo Atributos: %%~aa
     Echo Fecha/H.:  %%~ta
     Echo Tamanyo:   %%~za
     Echo+

)

Pause >NUL
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:08   #23
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 6.2 Variable Standard



  • SET


Una variable standard es la más común en Batch, se puede mostrar usando el comando SET o el comando ECHO (Ojo, mostrar es algo muy distinto a USAR)

Código:
@Echo OFF
Set WINDIR
Echo %WINDIR%
Pause >NUL
  





Para usar una variable es suficiente con escribir su nombre:
(No nos olvidemos de encerrarla con comillas)

Código:
@Echo OFF
DIR "%WINDIR%"
Pause >NUL
  





Si una variable contiene una orden y usamos la variable, se procesará la orden:

Código:
@Echo OFF
Set "Variable=Dir /B"
%VARIABLE%
Pause >NUL
  





El nombre de las variables puede contener letras, números, espacios, y operadores, pero el nombre de una variable nunca debe empezar por un número, para que no entre en conflicto con las variables especiales.

Código:
@Echo OFF
Set 0Variable=Valor
Echo %0variable%
Pause >NUL
  


Para que el nombre de la variable no entre en conflicto, la encerraremos entre comillas (Pero siguiendo la regla de NO empezar el nombre de la variable con un número):
Código:
@Echo OFF
Set "V0a _ri &| #~able=Valor"
Echo "%V0a _ri &| #~able%"
Pause >NUL
  







  • SET /P


Con el parámetro /P (Prompt) del comando SET podemos crear una variable y esperar la respuesta del usuario, es decir, el valor de la variable será lo que el usuario escriba en la CMD.

Código:
@Echo OFF
SET /P "VARIABLE=Escriba su nombre >> "
Echo Ud. se llama %VARIABLE%
Pause >NUL
  







  • SET /A


Con el parámetro /A del comando SET podemos realizar operaciones matemáticas, y asignar valores numéricos a una variable.

Sin usar el parámetro /A también podemos asignar números a una variable, pero con el parámetro /A nos aseguramos de que el valor de la variable séa un número, sin excepciones.

Si la operación o asignación falla, Batch automáticamente le asignará el número más bajo a la variable (el 0)

Ejemplo:
Código:
@Echo OFF
SET /A NUMERO=abcde
Echo %NUMERO%
Pause >NUL
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:10   #24
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 6.3 Variables expandidas


Las variables expandidas son prácticamente igual que las variables standard, pero para poder usarlas se debe habilitar la expansión de las mismas con el comando SETLOCAL:
Código:
Setlocal enabledelayedexpansion
  
Ejemplo:
Código:
@Echo OFF
Setlocal enabledelayedexpansion
Set "VARIABLE=VALOR"
Echo !VARIABLE!
Pause >NUL
  


Esta técnica se usa comúnmente dentro de un FOR donde para poder mostrar variables tienen que estar expandidas.

Pero estas variables tienes sus inconvenientes, ya que al habilitar la expansión, solamente podremos usar el caracter ! como operador de variable, es decir, no podremos mostrar el caracter (Ni siquiera excluyendolo ni usando comillas).

Ejemplo:
Código:
@Echo OFF
Setlocal enabledelayedexpansion
Echo !Hola
Echo ^!Hola
Echo "!Hola"
Pause >NUL
  


NOTA: Siempre se puede evitar la expansión y su restricción de caracteres, eso lo explicaré cuando lleguemos a la temática FOR.
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
pax01 (15-abr-2013)
Antiguo 25-feb-2013, 17:11   #25
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 6.4 Variables de entorno



Las variables de entorno son variables predefinidas del sistema, y se puede acceder a su contenido desde cualquier lugar.

Las variables de entorno por defecto en Windows 7 son las siguientes:


VARIABLE CONTENIDO
________ _________

%ALLUSERSPROFILE% C:\ProgramData
%APPDATA% C:\Users\(Nombre de usuario)\AppData\Roaming
%COMMONPROGRAMFILES% C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files
%COMPUTERNAME% (NOMBRE DEL PC-PC)
%COMSPEC% C:\Windows\System32\cmd.exe
%DIR% (Directorio actual)
%HOMEDRIVE% C:
%HOMEPATH% C:\Users\(Nombre de usuario)
%LOCALAPPDATA% C:\Users\(Nombre de usuario)\AppData\Local
%LOGONSERVER% \\{domain_logon_server}
%PATH% C:\Windows\System32\;C:\Windows\;C:\Windows\System 32\Wbem;etc...
%PATHEXT% .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF; .WSH; .MSC
%PROCESSOR_ARCHITECTURE% (AMD64) (x86)
%PROCESSOR_IDENTIFIER% (Modelo del procesador)
%PROCESSOR_LEVEL% (Número)
%PROCESSOR_REVISION% (Número)
%PROGRAMDATA% C:\ProgramData
%PROGRAMFILES% C:\Program Files
%PROGRAMFILES(x86)% C:\Program Files (x86)
%PROMPT% $P$G
%PSMODULEPATH% C:\Windows\system32\WindowsPowerShell\v1.0\Modules \
%PUBLIC% C:\Users\Public
%SYSTEMDRIVE% C:
%SYSTEMROOT% C:\Windows
%TEMP% C:\Users\{Username}\AppData\Local\Temp
%TMP% C:\Users\{Username}\AppData\Local\Temp
%USERDOMAIN% (Nombre de dominio)
%USERNAME% (Nombre de usuario)
%USERPROFILE% C:\Users\(Nombre de usuario)
%WINDIR% C:\Windows




  • Variables de entorno dinámicas



VARIABLE CONTENIDO
________ _________

%CD% (Directorio actual)
%DATE% (Fecha actual)
%TIME% (Hora actual)
%RANDOM% (Número aleatorio entre 0 y 32767)
%ERRORLEVEL% (Número de salida)
%CMDEXTVERSION% (Número)
%CMDCMDLINE% "cmd.exe" (Parámetro)




NOTA: Las variables de entorno del usuario se almacenan en la clave de registro: HKEY_CURRENT_USER\Environment

NOTA: Las variables de entorno del sistema se almacenan en la clave de registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Session Manager\Environment
__________________
EleKtro está desconectado  
Los Siguientes 2 Usuarios Agradecieron a EleKtro por Este Mensaje:
converses_pink (17-sep-2013), pax01 (15-abr-2013)
Antiguo 25-feb-2013, 17:11   #26
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 6.5 Variables de FOR


Las variables de FOR son un tipo de variables que solamente se pueden usar con el comando FOR, así que por el momento no digo más, las explicaré en el apartado del comando FOR.
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:11   #27
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

7. Comparación condicional






Las comparaciones se efectuan con el comando IF.

El comando IF se puede usar para trés tipos de comparaciones.


1º - Para comparar un elemento:

Código:
IF "Elemento 1" EQU "Elemento 2" (
     REM Código si se cumple la condición
)
  
2º - Para comprobar si existe un elemento (archivo o carpeta)

Código:
If Exist "Elemento 1" (
     REM Código si se cumple la condición
)
  
3º - Para comprobar si existe una variable.

Código:
If DEFINED "Elemento 1" (
     REM Código si se cumple la condición
)
  
También se pueden realizar comparaciones con varias condiciones:

Código:
If "elemento 1" EQU "elemento 2" if "elemento 3" EQU "Elemento 4" (
     REM Código si se cumple la condición
)
  



El comando IF acepta estos parámetros y condiciones:

/I - No distingue entre mayúsculas y minúsculas

Ejemplo:
Código:
@Echo OFF
IF "A" EQU "a" (Echo correcto)
Pause >NUL
  
La condición no se cumple porque el primer elemento está en mayusculas, y el segundo en minúsculas.

Código:
@Echo OFF
IF /I "A" EQU "a" (Echo correcto)
Pause >NUL
  
La condición se cumple.




NOT

Código:
@Echo OFF
IF NOT "A" EQU "a" (Echo "A" no es igual que "a")
Pause >NUL
  
Código:
@Echo OFF
IF NOT EXIST "C:\fail.txt" (Echo El archivo "C:\Fail.txt" no existe)
Pause >NUL
  
Código:
@Echo OFF
IF NOT DEFINED VARI (Echo la variable "%%VARI%%" no existe)
Pause >NUL
  



ELSE

Se utiliza para ejecutar un código si la condición no se cumple.

Ejemplo:
Código:
@Echo OFF
IF EXIST "C:\Archivo.txt" (
     Echo El archivo "C:\Archivo.txt" ya existe.
) ELSE (
     Echo El archivo "C:\Archivo.txt" no existe.
     Echo Test > "C:\Archivo.txt"
     Echo El archivo "C:\Archivo.txt" ha sido creado...
)
Pause >NUL
  



En las comparaciones podemos usar los operadores condicionales que expliqué en el apartado de operadores... -> 4.5 Operadores de comparación (o Condicionales)

Ejemplo:
Código:
@Echo OFF
IF 1 LSS 2 (Echo 1 es menor que 2) 
Pause >NUL
  
NOTA: Se puede usar el operador EQU o el operador ==

Código:
IF "A"=="A" (Echo A es igual que A)
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 17:11   #28
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.955
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

AÑADIRÉ MÁS INFORMACIÓN A ESTE APARTADO DE "FOR" DENTRO DE POCO...
ESTE APARTADO Y EL TUTORIAL, NO ESTÁN ACABADOS.







8. Búcles






Hay tres maneras de crear un búcle.

Una manera es usando el comando FOR, el cual ejecuta un comando o una serie de comandos repetidamente sobre varios archivos o datos.

Otra manera es usando el comando FORFILES,

Y la última manera de crear un búcle es usando etiquetas, y el comando GOTO.

Podemos crear un búcle infinito usando una etiqueta, y el comando GOTO, aunque este tipo de búcle es muy distinto y no tiene el mismo fín que un FOR.


Ejemplo de búcle infinito:
Código:
@ECHO OFF

SET VAR1=A
SET VAR2=B

:ETIQUETA
IF NOT "%VAR1%" EQU "%VAR2%" (
     Echo Los valores "%VAR1%" y "%VAR2%" no conciden.
     GOTO :ETIQUETA
) ELSE (
     Echo Los valores "%VAR1%" y "%VAR2%" coinciden.
     Pause&Exit
)
  



Hay varios tipos de FOR, por lo tanto varios tipos de búcles.






  • FOR



FOR es un tipo de búcle para archivos, o para una serie de expresiones.

Sintaxis:
FOR %%variable IN (archivo o expresión) DO (comandos)


Ejemplos:
Código:
@ECHO OFF
FOR %%A in (*.bat) DO (Echo %%A)
Pause&Exit
  


Código:
@ECHO OFF
SET "VARIABLE=a b c d e"
FOR %%A in (%VARIABLE%) DO (Echo %%A)
Pause&Exit
  







  • FOR /R

(FOR-Files-Rooted at Path)


FOR /R es un tipo de búcle recursivo para archivos.

Sintaxis:
FOR /R "RUTA" %%variable IN (archivos) DO (comandos)


Ejemplos:
Código:
@ECHO OFF
FOR /R "C:\" %%A in (*.dll) DO (Echo %%A)
Pause&Exit
  







  • FOR /D

(FOR-Directories)


FOR /D es un tipo de búcle para carpetas.

Sintaxis:
FOR /D "RUTA" %%variable IN (carpetas) DO (comandos)

NOTA: Se puede usar en combinación del parámetro "/R" para procesar directorios recursivamente.


Ejemplos:
Código:
@Echo OFF
FOR /D /R "C:\" %%A in (*system32) DO (Echo %%A)
Pause >NUL
  







  • FOR /L

(FOR-List of numbers)


FOR /L es un tipo de búcle para un rango de números.

Sintaxis:
FOR /L %%variable IN (Número inicial,Incremento,Número final) DO (comandos)


Ejemplos:
Código:
@ECHO OFF
FOR /L %%A IN (0,1,10) DO (Echo %%A)
Pause&Exit
  


Código:
@ECHO OFF
FOR /L %%A IN (5,5,25) DO (Echo Hola!)
Pause&Exit
  
Aquí vemos como el primer número del rango es "5", se va incrementando el número por "5" hasta llegar al "25", por lo tanto el bucle se efectúa 5 veces.








  • FOR /F

(FOR-File contents) (o FOR-Command Results)


FOR /F es un tipo de búcle para el contenido de un archivo, o para el resultado de un comando.

Sintaxis:
FOR /F "PARÁMETROS" %%variable IN ('Archivo o comando') DO (comandos)

Los comandos deben estar entre comillas ('comando')

Los parámetros de FOR /F son:


eol=X - Añade un caracter de comentario a cada línea.

skip=X - Especifica el número de líneas que hay que saltarse al principio del archivo.

delims=XXX - Especifica un grupo de delimitadores.
Esto reemplaza al grupo de delimitadores predeterminados de espacio y tabulación.

usebackq - Especifica que 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 deomillas dobles para entrecomillar los nombres de archivo en un conjunto de archivos.

tokens=x,y,m-n - Especifica que símbolos de cada línea deben pasarse al cuerpo de la clausula "for" en cada iteración.
Esto causará que los nombres de variables adicionales sean asignados.
Si el último caracter 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.



Ejemplo skip:
Código:
@ECHO OFF
FOR /F "Skip=1" %%A IN ('Echo Linea1 ^& Echo linea2 ^& Echo Linea3') DO (Echo %%A)
Pause&Exit
  



Ejemplo delims:
Código:
@ECHO OFF
FOR /F "Delims=c" %%A IN ('Echo abcde') DO (Echo %%A)
Pause&Exit
  
__________________
EleKtro está desconectado  
Tema Cerrado

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
generador de virus batch by condor v2.2 apdv2.12 CodeCommand 10 30-oct-2012 11:55
~ Videotutorial de C++ ~ | 29 Capítulos + Instalación | pax01 Carbide C/C++ 0 15-ene-2012 20:21
Tutorial Programación Batch - completo - GUN$ Batch / Bash-Shell 5 04-dic-2011 17:42



Portal Hacker
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0