ALGUNOS TRUCOS EN LOS SCRIPTS (.BAT) DE XP, W2000 y W2003

 

1) ¿Cómo realizar operaciones matemáticas con una cadena de caracteres?
--------------------------------------------------------------------------------------------------------------------

Las variables de entorno son variables de caracteres (strings) por tanto, una asignación del tipo:

set i=1+2

contiene el string "1+2" no contiene un "3". Puede comprobarse ejecutando:

echo %i%

Si queremos que el resultado, sea el resultado de una operación matemática, deberemos hacer:

set /a i=1+2

en este caso, al ejecutar un echo %i% nos devolverá el resultado: 3

se puede hacer indirectamente, es decir:

set i=1+2+3
echo %i% nos devolverá "1+2+3"
set /a j=(%i%)*2 nos devolverá el resultado de (1+2+3)*2 = 12

 

2) ¿Cómo sustituir, dentro de una string de caracteres, un substring por otro determinado?
---------------------------------------------------------------------------------------------------------------------------------------------

set variable=+ABC+123

imaginemos que queremos cambiar TODOS los signos + por las letras "kf". En ese caso hacemos a continuación:

set variable=%variable:+=kf%

En este caso, al ejecutar ahora un echo %variable% nos devolverá: "kfABCkf123"

En particular, nos puede servir para eliminar los caracteres de puntuación de una variable sustituyéndolas por nulos. Es decir:

set variable=1.234.567

si hacemos ahora:

set variable=%variable:.=%

su contenido quedará como "1234567" por tanto, numérico puro y con el /a del punto 1) anterior podríamos realizar operaciones matemáticas

 

3) Cómo obtener un substring de una variable de caracteres.
---------------------------------------------------------------------------------------------

Sea:

set variable=abcdefgh ijkl

si queremos ahora recuperar las 5 primeras posiciones, simplemente:

echo %variable:~,5%

podríamos asignárselo también a otra variable de la forma:

set nueva_var=%variable:~,5%

de esta manera, nueva_var tendrá el contenido "abcde"

 

4) Cómo leer todo el contenido de un fichero en un script y poder procesar línea por línea.
--------------------------------------------------------------------------------------------------------------------------------------------

for /f "tokens 1* delims=" %%i in (mi_fichero) do call :proceso "%%i%%j"

posteriormente en la rutina :proceso de nuestro scrip deberemos eliminar las comillas que hemos introducido a propósito para que no separen en varios parámetros y de esta manera recibir uno solo. Puede hacerse con el tip 2) anterior.

 

NOTA: Los TIPS 2 y 3 no los he encontrado documentados en ningún sitio. Únicamente investigando en otros scripts que han llegado a mi poder he deducido el cómo funcionan. Agradecería que si alguien tiene información particular sobre el tratamiento de substrings de ese tipo, me lo comentase.

José Manuel Tella Llop
MS MVP - DTS
jmtella@compuserve.com

Respecto a la NOTA:
1.- El tema de los TIPS 2 y 3 se encuentra en un libro "buenísimo" de MacMillan llamado "Windows NT Shell Scripting"
2.- Si tienes la licencia perpétua de http://www.jsiinc.com, al abrir la versión Offline existen 4-5 trucos SÓLO para suscriptores donde se comentan precisamente esos trucos...

Y algunos de ellos públicos:

4194 » How do I determine the position of a sub-string in a string?
http://www.windowsitpro.com/article/tips/jsi-tip-4194-how-do-i-determine-the-position-of-a-sub-string-in-a-string-

4192 » How can I determine if a string contains a specific sub-set of characters?
http://www.windowsitpro.com/article/tips/jsi-tip-4192-how-can-i-determine-if-a-string-contains-a-specific-sub-set-of-characters-

 

Ramón Jiménez
MCSA, MCSE NT4/2000, CCA, ITIL Certified
Senior Consultant. Project Manager
Microsoft Services

21 - mayo - 2003

Multinglés/JMT