A medida que adquiera experiencia con archivos por lotes, es probable que descubra que necesita manipular cadenas de texto. Es posible que deba solicitarle a un usuario un nombre o contraseña, procesar una lista de archivos o buscar un nombre en una lista de teléfonos. Todos estos son ejemplos de procesamiento de cadenas: la manipulación de texto legible.

 

TCC-RT incluye varias funciones que facilitan el procesamiento de cadenas. Por ejemplo, puedes utilizar el ENTRADA, MSGBOXy CAJA DE CONSULTAS comandos para la entrada del usuario; el ECO y ECHOERR, ECHOS y ECHOSERR, PANTALLA, SCRPUTy VSCRPUT comandos para salida; y el PARA comando o el @FILEREAD Función para escanear las líneas de un archivo. Además, funciones variables ofrecen una amplia gama de manejo de cadenas y caracteres capacidades.

 

Por ejemplo, suponga que necesita un archivo por lotes que solicite un nombre al usuario, divida el nombre en un nombre y un apellido, y luego ejecute un programa hipotético de INICIO DE SESIÓN. LOGIN espera la sintaxis /F:primero /L:último con el nombre y apellido en mayúsculas y ninguno de los nombres tiene más de 8 caracteres. A continuación se muestra una forma de escribir un archivo por lotes de este tipo:

 

@ Echo off

setlocal

unalias *

input Introduce tu nombre (sin iniciales):  %%name

 

establecer primero=%@palabra[0,%nombre]

establecer flen=%@len[%primero]

establecer último=%@palabra[1,%nombre]

establecer llen=%@len[%último]

 

si %flen gt 8 .o. %lleno gt 8 entonces

  echo Nombre o apellido demasiado largo

  renuncia

endiff

 

iniciar sesión /F:%@superior[%primero] /L:%@superior[%último]

endlocal

 

La SETLOCAL El comando al principio de este archivo por lotes guarda el entorno y los alias. Entonces el UNALIAS* El comando elimina los alias existentes para que no interfieran con el comportamiento de los comandos en el resto del archivo por lotes. El primer bloque de líneas termina con un ENTRADA comando que solicita al usuario que ingrese un nombre. La entrada del usuario se almacena en la variable de entorno NOMBRE.

 

El segundo bloque de líneas extrae el nombre y apellido del usuario de la variable NOMBRE y calcula la longitud de cada uno. Almacena el nombre y apellido, junto con la longitud de cada uno, en variables de entorno adicionales. Tenga en cuenta que el @PALABRA La función numera la primera palabra como 0, no como 1.

 

La IFF El comando en el tercer bloque de líneas prueba la longitud tanto del nombre como del apellido. Si alguno tiene más de 8 caracteres, el archivo por lotes muestra un mensaje de error y finaliza. (QUERYBOX puede limitar la longitud del texto de entrada de forma más sencilla con su /L cambiar. Usamos un método un poco más engorroso arriba para demostrar el uso de funciones de cadena en archivos por lotes).

 

Finalmente, en el último bloque, el archivo por lotes ejecuta el programa LOGIN con los parámetros apropiados, luego usa el ENDLOCAL comando para restaurar el entorno original y la lista de alias. Al mismo tiempo, ENDLOCAL descarta las variables temporales que utilizó el archivo por lotes (NOMBRE, PRIMERO, FLEN, etc.).

 

Cuando procesa cadenas, también debe evitar algunas trampas comunes. El más importante es el manejo de caracteres especiales.

 

Supongamos que tiene un archivo por lotes con estos dos comandos, que simplemente aceptan una cadena y la muestran:

 

input Introduce una cadena:  %%str

eco %cadena

 

Esas líneas parecen seguras, pero ¿qué sucede si el usuario ingresa la cadena "algunos > ninguno" (sin las comillas)? Después de colocar la cadena en la variable STR, la segunda línea se convierte en

 

hacer eco de algunos > ninguno

 

La ">" es un redirección símbolo, por lo que la línea repite la cadena "algunos" y la redirige a un archivo llamado NINGUNO; probablemente no sea lo que esperaba. Podrías intentar usar doble comillas para evitar este tipo de problema, pero eso no funcionará del todo. Si usa comillas inversas (ECHO `%STR`), el comando repetirá la cadena de cuatro caracteres %STR. Los nombres de las variables de entorno no se expanden cuando están entre comillas.

 

Si utiliza comillas dobles (ECHO "%STR"), la cadena ingresada por el usuario se mostrará correctamente, al igual que las comillas dobles. Con comillas dobles, el resultado se vería así:

 

"algunos > ninguno"

 

Como puedes imaginar, este tipo de problema se vuelve mucho más difícil si intentas procesar texto desde un archivo. Los caracteres especiales en el texto pueden causar todo tipo de confusión en sus archivos por lotes. El texto que contiene comillas invertidas, comillas dobles o símbolos de redirección puede ser prácticamente imposible de manejar correctamente.

 

Una forma de superar estos problemas potenciales es utilizar el SET DOS /X comando para deshabilitar temporalmente los símbolos de redirección y otros caracteres especiales. Es mucho más probable que el archivo por lotes de dos líneas anterior produzca los resultados esperados si se reescribiera de esta manera:

 

conjuntos /x-15678

input Introduce una cadena:  %%str

eco %cadena

conjuntos /x0

 

La La primera línea desactiva el procesamiento de alias y desactiva varios símbolos especiales, incluido el separador de comandos y todos los símbolos de redirección. Una vez que se ha procesado la cadena, la última línea vuelve a habilitar las funciones que se desactivaron en la primera línea.

 

Si necesita capacidades avanzadas de procesamiento de cadenas más allá de las proporcionadas por TCC, es posible que desee considerar el uso de la Lua, Perl, Pythono REXX idiomas. Nuestros productos pueden ejecutar programas Perl, Python, REXX y Ruby internamente y también admiten la evaluación interna de expresiones individuales de Perl, Python, REXX y Ruby.