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 Services21 - mayo - 2003