Los comandos DO (cuando se usa con la palabra clave HASTA o MIENTRAS), IF, IFF/ELSEIFF y la función variable @SI evaluar un expresión condicionaly realizar una acción diferente en función de si el expresión es verdad. El SWITCH El comando prueba la igualdad de pares de valores. La mayoría de ejemplos a continuación utilice el IF comando, pero las expresiones condicionales también podrían usarse en los otros casos anteriores.

 

Una expresión condicional puede ser una de las siguientes, como se describe a continuación:

 

Un pasoexpresión relacional
Un pasoprueba de estado
Un pasoexpresión lógica

 

Expresión relacional

 

Una expresión relacional compara dos cadenas de caracteres, utilizando uno de los operadores relacionales en la siguiente tabla. Cada una de estas dos cadenas de caracteres puede contener texto literal, variables internas y de entorno, y funciones variables, incluidas las definidas por el usuario, en cualquier combinación. Tenga en cuenta que las comillas dobles son significativas.

 

Comparación numérica y de cadenas

 

Al comparar las dos cadenas de caracteres, se utilizará una comparación numérica o de cadenas. Una comparación numérica trata las cadenas como valores numéricos y las prueba aritméticamente. Una comparación de cadenas trata las cadenas como texto. El analizador utiliza las reglas descritas para el @NUMÉRICO función para determinar si las cadenas son numéricas o no, y solo si ambas son numéricas se realiza una comparación numérica. Si alguno de los valores no es numérico, se utiliza una comparación de cadenas. Para forzar una comparación de cadenas cuando ambos valores pueden ser numéricos, utilice comillas dobles alrededor de los valores que está probando, como se muestra a continuación. Como las comillas no son un carácter numérico, se realiza una comparación de cadenas. No se puede forzar la comparación numérica. Para comparar números hexadecimales numéricamente, debes convertirlos a números decimales usando @CONVERTIR. Esto no es necesario si ambos tienen la misma longitud: la comparación de cadenas y la comparación numérica producen el mismo resultado.

 

El siguiente ejemplo demuestra la diferencia entre comparaciones numéricas y de cadenas, como se muestra en la siguiente tabla. Numéricamente, 2 es más pequeño, pero como cadena es "más grande" porque su primer dígito es más grande que el primer dígito de 19. Entonces, el primero de estos condiciones será verdadero y el segundo será falso:

 

expresión

propuesta de

tipo de comparación

2 lt 19

verdadero

numérico

"2" lt "19"

false

cadena

 

Formatos de expresión relacional

 

El formato de una expresión relacional es uno de

 

numero1 operador relacional numero2

string1 operador relacional string2

 

Nota: La sintaxis correcta requiere un espacio antes y después operador para separarlo de sus operandos. Construcciones comúnmente vistas como %a==b pueden funcionar o no dependiendo de los parámetros específicos, pero son nunca recomendado.

 

Operadores relacionales

 

operador

comparación numérica: expresión is verdadero if

comparación de cadenas: expresión is cierto si, al ignorar mayúsculas y minúsculas:

EQ or ==

numero1 iguales numero2

string1 iguales string2

NE or !=

numero1 no es igual numero2

string1 no es igual string2

LT

numero1 es menor que numero2

string1 precede alfabéticamente string2

LE

numero1 es menor o igual a numero2

string1 precede alfabéticamente o es igual a string2

GE

numero1 es mayor o igual a numero2

string1 alfabéticamente sucede o es igual a string2

GT

numero1 es mayor que numero2

string1 alfabéticamente tiene éxito string2

EQC

probado como cuerdas è

string1 es idéntico a string2, incluyendo caso de personaje

=~

prueba de expresión regular

string1 coincide con la expresión regular en string2

!~

prueba de expresión regular

string1 no coincide con la expresión regular en string2

 

Las diferencias entre mayúsculas y minúsculas se ignoran en las comparaciones de cadenas (excepto por EQC). Si dos cadenas comienzan con el mismo texto pero una es más corta, se considera que la cadena más corta precede (es menor que) a la más larga. Por ejemplo, "a" es menor que "abc" y "hola_allí" es mayor que "hola".

 

Al comparar cadenas de texto, es posible que deba encerrar los parámetros entre comillas dobles para evitar errores de sintaxis que pueden ocurrir si uno de los valores de los parámetros está vacío (p.ej, debido a una variable de entorno a la que nunca se le ha asignado un valor). Esta técnica no funcionará para comparaciones numéricas, ya que las comillas forzarán una comparación de cadenas, por lo que con las pruebas numéricas debe asegurarse de que a todas las variables se les asignen valores antes de realizar la prueba.

 

Para mantener la compatibilidad con CMD, TCC reconoce los siguientes nombres adicionales para condiciones:

 

CMD

TCC

EQL or EQUIPAR

EQ

NEQ

NE

LSS

LT

LEQ

LE

GTR

GT

GEQ

GE

 

Variables internas y funciones variables son muy poderosos cuando se combinan con comparaciones numéricas y de cadenas. Le permiten probar el estado de su sistema, las características de un archivo, información de fecha y hora o el resultado de un cálculo. Es posible que desee revisar las variables y las funciones de las variables al determinar la mejor manera de configurar una prueba de condición.

 

Prueba de estado

 

Estas condiciones prueban el sistema operativo, el sistema de archivos o TCC estado. Además de las pruebas siguientes, existen muchas variables internas y funciones variables que le permiten probar el estado de muchas otras partes del sistema.

 

En las descripciones siguientes de las distintas pruebas de estado, las pruebas de estado son verdaderas si y sólo si la condición especificada es verdadera.

 

DEFINIDO variable

Si la variable existe en el entorno, la expresión es verdadera. Esto equivale a probar si la variable no está vacía.




Nota: variables GOSUB, variables de matriz y variables internas no existen en el entorno, por lo que siempre no pasan la prueba DEFINIDA.



NIVEL DE ERROR [operador relacional] no

Esta prueba recupera el código de salida del programa externo anterior. Por convención, los programas devuelven un código de salida de 0 cuando tienen éxito y un número distinto de cero para indicar un error. El operador relacional puede ser cualquiera de los enumerados anteriormente (por ejemplo, EQ, GT). Si no se especifica ningún operador, el valor predeterminado es GE. La comparación se hace numéricamente.




No todos los programas devuelven un código de salida explícito. Para los programas que no lo hacen, el comportamiento de ERRORLEVEL no está definido.



EXISTE nombre de archivo

Si el nombre del archivo coincide con un archivo que existe, la expresión es verdadera. Puede utilizar comodines en el nombre del archivo, en cuyo caso la expresión es verdadera si existe algún archivo que coincida con el nombre del comodín. El nombre del archivo puede incluir una ruta absoluta o relativa.




ADVERTENCIA: En Windows la expresión será verdadera si hay un archivo o un directorio llamado nombre de archivo. Utilice ISFILE o ISDIR en su lugar.




El nombre de archivo especial NUL se usa comúnmente en archivos por lotes CMD para probar la existencia de un directorio. La expresión existe xxx\NUL es verdadera sólo si xxx es un directorio.



ISALIAS Apodo

Si aliasname se define como un alias, la expresión es verdadera.



ISAPP nombre de la aplicación

Si appname coincide con el nombre de una aplicación que se está ejecutando actualmente, la expresión es verdadera. Para hacer coincidir una aplicación específica, debe ingresar el nombre de ruta completo de la aplicación. Los nombres parciales y los comodines producirán resultados poco fiables. Se comprobarán tanto la forma corta como la larga del nombre (consulte Búsquedas de archivos LFN para obtener detalles sobre la correspondencia entre nombres de archivos cortos y largos).


Esta prueba puede requerir el privilegio DEBUG.



ISBATCH nombre de archivo

Si el nombre de archivo especificado es un archivo por lotes, la expresión es verdadera.



ISDIR camino

DIREXISTA camino

 

Si el directorio especificado por ruta existe, la expresión es verdadera. La ruta puede ser absoluta o relativa. DIREXIST puede utilizarse como sinónimo de ISDIR.



ISFILE nombre de archivo

Si el nombre del archivo coincide con un archivo que existe, la expresión es verdadera. Puede utilizar comodines en el nombre del archivo, en cuyo caso la expresión es verdadera si existe algún archivo que coincida con el nombre del comodín. ISFILE sólo encuentra archivos, no directorios.



FUNCIÓN nombre

Si se carga el nombre de la función definida por el usuario, la expresión es verdadera.



INTERNO comando

Si el comando es un comando interno activo, la expresión es verdadera. Los comandos se pueden activar y desactivar con el SETDOS /Yo ordeno.



ISLABEL Label

Si la etiqueta existe en el archivo por lotes actual, la expresión es verdadera. Las etiquetas pueden tener una o más palabras. Tenga en cuenta que esta prueba no tiene nada que ver con las etiquetas de las particiones del disco.



ISBIBLIOTECA nombre

Si el nombre es una función de biblioteca, la expresión es verdadera.



ESPLUGIN nombre

Si el nombre es un plugin variable, función o comando, la expresión es verdadera.



ESLEGIBLE nombre de archivo

Si el nombre del archivo es legible, la expresión es verdadera.



ENLACE ISSYM nombre de archivo

Si el archivo es un enlace simbólico, la expresión es verdadera.



ES VISIBLE "Título"

Si la ventana especificada es visible, la expresión es verdadera. (Esto significa que Windows ha configurado el indicador de visibilidad; no significa que la ventana sea necesariamente visible en el escritorio).



ESCRIBIBLE nombre de archivo

Si el nombre del archivo se puede escribir, la expresión es verdadera.



ISHUNG "título"

Si la ventana especificada no responde, la expresión es verdadera.

 

ENCHUFAR módulo

Si el módulo de complemento está cargado, la expresión es verdadera. No incluya una extensión (es decir, ".dll") para el nombre del módulo.

 

Expresiones lógicas

 

Una expresión lógica es una de las siguientes:

 

 Un paso        a expresión relacional

 Un paso        a prueba de estado

 Un paso        la operador lógico unario NO (o !) seguido de un expresión lógica

 Un paso        dos expresión lógicaestá conectado por un operador lógico binario

 

Operadores logicos

 

operador

tipo

personal

el valor es VERDADERO si

NO

unario

NO cond

cond Es falso.

.Y.

binario

condición1 .Y. condición2

ambas condición1 y condición2 son verdaderas.

.O.

binario

condición1 .O. condición2

al menos uno de condición1 y condición2 es verdad.

.XOR.

binario

condición1 .XOR. condición2

uno de condición1 y condición2 es VERDADERO y el otro es FALSO.

 

Este ejemplo ejecuta un programa llamado CARGA DE DATOS si hoy es lunes o martes (ingrese esto en una línea):

 

si "%_dow" == "lunes" .o. "%_dow" == Carga de datos "martes"

 

Las condiciones de prueba siempre se escanean de izquierda a derecha; hay sin orden de precedencia implícito, como ocurre en algunos lenguajes de programación. Sin embargo, puede forzar un orden específico de prueba agrupando las condiciones entre paréntesis, por ejemplo (ingrese esto en una línea):

 

if (%a == 1 .o. (%b == 2 .y. %c == 3)) hace eco de algo

 

Combinando expresiones lógicas

 

Paréntesis sólo se puede utilizar cuando la porción del expresión dentro del paréntesis contiene al menos uno de los operadores lógicos binarios .y., .o.o .xor.. Los paréntesis en una expresión simple que no combina dos o más pruebas se tomarán como parte de la cadena a probar y probablemente harán que la prueba falle. Por ejemplo, la primera de estas pruebas es FALSOel segundo es VERDADERO:

 

(un == un)

(a == a .y. b == b)

 

Los paréntesis pueden estar anidados.

 

Ejemplos

 

Este fragmento de archivo por lotes ejecuta un programa llamado SEMANAL si hoy es lunes:

 

si "%_dow" == "mon" semanal

 

Este fragmento de archivo por lotes prueba un valor de cadena:

 

input "Ingrese su selección: " %%cmd

si "%cmd" == "WP" ir a wordproc

si "%cmd" NE "GRÁFICOS" ir a badentry

 

Este ejemplo llama GO.BTM si los dos primeros caracteres del archivo MI ARCHIVO están GO:

 

si "%@left[2,%@line[myfile,0]]" == "GO" llama a go.btm

 

El primer fragmento de archivo por lotes a continuación prueba la existencia de A:\JAN.DOC antes de copiarlo al disco C (esto evita un mensaje de error si el archivo no existe):

 

si es el archivo a:\jan.doc copia a:\jan.doc c:\

 

Este ejemplo prueba el código de salida del programa anterior y detiene todo el procesamiento de archivos por lotes si ocurre un error:

 

si nivel de error == 0 ir al éxito

echo "Error externo; ¡el archivo por lotes finaliza!"

cancelar