Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#10161
  • 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:

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 ( @ ) simplemente para que nos oculte esa información.

Otro ejemplo:

echo comando 1
echo comando 2
@echo comando 3
echo comando 4
Pause





El operador @ 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 (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:
@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í:

@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

@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).

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

!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:
@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:
@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:
@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:
@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:
@Echo OFF
Dir \
REM Equivale a "DIR C:\"
Pause >NUL
#10162
  • 4.7 Operadores aritmétricos y de asignación


  • =

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

Ejemplo:
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:
@Echo off
Set /A "NUM=2+2"
Echo %NUM%
REM El resultado es 4
Pause >NUL







  • +=

Este es el operador alternativo de suma.

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







  • -

Este es el operador de resta.

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







  • -=

Este es el operador alternativo de resta.

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







  • *

Este es el operador de multiplicación.

Ejemplo:
@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:
@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:
@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:
@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:
@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.

@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:
@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"


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


  • >

Redirecciona la salida de un comando, a un archivo.

Ejemplo:
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:
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:
SORT < "Archivo.txt"






  • |

Redirecciona la slaida de un comando, a otro comando.

Ejemplo:
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:


@Echo OFF
(
 Echo 1
 Echo 2
 Echo 3
)>"Archivo.txt"







Otros tipos de redireccionamiento ordinario:

Comando.exe 2> "Archivo"
Redirecciona cualquier error del comando al archivo.

Comando.exe 2>> "Archivo"
Redirecciona cualquier error del comando al archivo.

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

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

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:
Type "Archivo.txt" > PRN
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:
@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


#10164
  • 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:

@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:
@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.
#10165
  • 4.4 Operadores de agrupación


  • ( )

El operador de agrupación en realidad son dos caracteres distintos pero que han de usarse combinadamente, ( y ).

Nunca se debe dejar abierta una agrupación, por lo tanto como norma general por cada caracter ( (usado como operador) debe existir la misma cantidad del caracter ) en el script, de lo contrario dará error de sintaxis.






  • Agrupación de una línea

1er Ejemplo:
@Echo off
(Echo Agrupacion 1 & pause)

Hemos agrupado (y concatenado) el comando echo y el comando pause , pero la agrupación hay que usarla con algún propósito y en este ejemplo no es necesario usar la agrupación, solo es para que aprendais a agrupar.

2º Ejemplo:
@Echo off
(Echo Agrupacion 1 & Dir /B FAIL) || (Echo Agrupacion 2 & Pause)

Hemos agrupado a la izquierda una serie de 2 comandos concatenados, y en la derecha otra agrupación de 2 comandos,
Los comandos que estén dentro de una agrupación cuentan como "un solo comando", si cualquiera de ellos da error, al usar el operador de ejecucón condicional || se procesará la segunda agrupación del ejemplo.

3er Ejemplo:
@Echo off
(Echo Agrupacion 1 & Dir /B FAIL) || (Echo Agrupacion 2) & Pause

Aquí hay una pequeña modificación, el comando pause no tiene agrupación.
Las reglas son las mismas que las de la explicación del 2º ejemplo, solo que el comando pause al no estar agrupado, se procesará sín excepción alguna (Se procesará incluso aunque no fallase la comparación del operador ||).
En este último ejemplo es donde mejor se puede apreciar la importancia de hacer correctamente una agrupación.






  • Agrupación multi-línea

Se pueden realizar agrupaciones de varias líneas.


1er ejemplo:
IF 1 EQU 1 (
    echo 1
    echo 2
    echo 3
)



2º Ejemplo:
@Echo OFF

(
  IF 1 EQU 1 (
      echo 1
      echo 2
      echo 3
  ) & (
     IF 2 EQU 2 (
               echo 4
               echo 5
               echo 6
     )
  )
) > "Archivo.txt"

Type "Archivo.txt"
Pause >NUL




(El 2º Ejemplo lo hice con mala leche, vale! xD)
#10166
  • 4.3 Operador de exclusión


  • ^  (XOR)

En algunas ocasiones no querremos que Batch procese los operadores como operadores, sinó como caracteres alfabéticos.

A la acción de usar el caracter ^ se le llama escapar.

Este operador sirve entre para excluir de la interpretación a un operador especial (Incluido el mismo operador XOR).

Pongamos unos ejemplos:

@Echo off
Echo Hola ^| MORE
Pause >NUL




@Echo off
Set "VARIABLE=ABC"
Echo ^%%VARIABLE^%%
Pause >NUL




@Echo off
Echo Hola ^^
Pause >NUL




NOTA: También se puede evitar el interpretado de los operadores encerrando el string con comillas dobles, y esto es otra razón de porque són tán importantes las comillas.
#10167
  • 4.2 Operadores de Ejecución condicional simulada

Estos operadores no se pueden usar directamente en Batch ni escribirlos en un script, deben ser simulados, debemos imaginarnos la situación y actuar como si pusiesemos el operador en práctica.

Un ejemplo muy claro sería una comparación multi-condicional (Varías condiciones):
@Echo off
if 5 equ 5 if 3 equ 3 (Echo true) else (Echo false)
Pause >NUL




En Batch no se puede usar el operador & como operador lógico, por eso el intérprete lo simula en segundo plano.

Para que algunos puedan entenderlo mejor, el código traducido a algún otro lenguaje de programación equivaldría a esto:
if 5 == 5 & if 3 == 3 (print "true") else (print "false")
#10168
  • 4.1 Operadores de Ejecución condicional


  • & (AND)

Este operador se usa para concatenar comandos, para ejecutarlos por orden, unos seguidos de otros.

Ejemplo:
@Echo off
Pause & Pause


NOTA: Los comandos se ejecutan sin excepción.






  • && (IF)

A diferencia del operador &, al usar && el comando que le proceda a la derecha solo se ejecutará si el primer comando tiene éxito (sin errores).

Ejemplo de error:
@Echo OFF
Dir /B FAIL && Echo SUCCEED
Pause


Ejemplo de éxito:
@Echo OFF
Dir /B * >NUL && Echo SUCCEED
Pause







  • || (OR)

Al usar || el comando que le proceda a la derecha solo se ejecutará si el primer comando falla (cualquier tipo de error).

Ejemplo de error:
@Echo OFF
Dir /B SUCCEED || Echo FAIL
Pause


Ejemplo de éxito:
@Echo OFF
Dir /B * >NUL || Echo FAIL
Pause


NOTA: Un comando exitoso (sin errores) mandará un código de error %ERRORLEVEL% de "0"
#10169
4. OPERADORES



Estos son los operadores de Batch:

Operadores de ejecución condicional:

&   - AND
&&  - IF
||  - OR

Operadores de ejecución condicional simulada:

&=  - AND
^=  - (Exclusive OR) XOR
|=  - OR

Operadores de exclusión:

^   - (Exclusive OR) XOR

Operadores de comparación:

==  - (EQUAL) igual

EQU - (EQUAL) igual
NEQ - (NON EQUAL) distinto
LSS - (LESS) menor que
LEQ - (LESS OR EQUAL) menor que o igual
GTR - (GRATER) mayor que
GEQ - (GREATER OR EQUAL) mayor que o igual

Operadores de agrupación:

( ) - Agrupadores

Operadores de desplazamiento lógico (o Redireccionamiento):

>   - (Right shift) RSH
>>  - (Right shift) RSH
<   - (Left shift) LSH
|   - PIPE

Operadores aritméticos y de asignación:

+   - Suma
-   - Resta
*   - Multiplicación
/   - División
%   - Módulo

=   - Asignar valor

+=  - Suma en variable
-=  - Resta en variable
*=  - Multiplicación en variable
/=  - División en variable
%=  - Módulo en variable

<<= - LSH (Left Shift)  en variable
>>= - RSH (Right Shift) en variable

Separadores de expresión:

,   - Separador

Otros operadores:

@   - AT
::
""
%
!
?
*   - Wildcard (o Comodín)
.
..
\
#10170
  • 3.7 Memorizar

Llegamos a un punto interesante, aprenderemos a memorizar las cosas usando las  variables.

Como ya expliqué, una variable es un espacio virtual donde podemos almacenar datos/valores.

Podemos bautizar a una variable con el nombre que deseemos.

Para guardar un valor en una variable usaremos el comando SET
Set MiVariable=Valor

NOTA: La acción de crear una variable (usar el comando set) se denomina "Setear".

Pero como ya expliqué que las comillas son muy importantes PARA TODO, nos acostumbraremos a setear utilizando comillas, es muy importante hacerlo aunque no es obligatorio.
Set "MiVariable=Valor"

Y en algunos casos muy especiales las deberemos usar así:
Set MiVariable="Valor"






Para que el intérprete de comandos reconozca una variable, debemos escribirla seguido del caracter % dos veces.
%MiVariable%

Véamos un ejemplo:
@Echo OFF
Set "Variable=Esto es lo que hay dentro de la variable"
Echo %VARIABLE%
Pause >NUL




Ahora otro ejemplo, sin usar las comillas:
@Echo OFF
Set Variable=Valor1_&_Valor2
Echo %VARIABLE%
Pause >NUL




¿Ves lo que sucede por no usar las comillas EN TODO?
Al no encerrar la variable con las comillas dobles y al mismo tiempo haber usado el caracter reservado de Batch &, el intérprete entiende que todo lo que hay a la derecha del caracter & es un comando, y dará error.



TIP: Se puede eliminar de la memoría una variable simplemente seteando el nombre de la variable, sin añadir ningún valor, de esta forma:
Set "Variable="



Aquí terminan nuestros primeros pasos, enhorabuena, ya estás preparado para comprender mejor las cosas.