Acudo a uds nuevamente por un problema que ya me está desagradando. Es segunda vez que me pasa, y de veras me causa muchos problemas.
Ya publiqué otro tema donde mencioné que cuando uso el ciclo FOR para tomar una línea de un archivo de texo resulta que la variable del ciclo (%%x) no me lo trae exacta ante algunos detalles; el primero: cuando el primer caracter es un espacio en blanco, y ahora en segundo lugar: cuando la línea tiene un signo de exclamación (!). En ambos casos me quita ese caracter, por cuanto si la línea dice:
" Hola mundo!" (sin las comillas)
la variable %%x se trae:
"Hola mundo" (sin las comillas).
Esto de verdad es un problema, porque lo que contengo en esas líneas son nombres de archivos que posteriormente necesito renombrar, pero ante tal cambio el sistema no puede encontrar los archivos. Ejemplo:
MiLista.log
Código:
Archivo1.txt
!Archivo.txt
archivo.txt
Esa es mi lista. El código del batch es:
Código:
setlocal enabledelayedexpansion
set lin=0
for /f "tokens=*" %%a in (MiLista.log) do (
set /a lin+=1
call set lsn!lin!=" %%a"
echo %%a
)
for /l %%n in (1,1,!lin!) do (
echo Linea %%n: "!lsn%%n!"
)
Bien, esto genera el siguiente resultado:
Código:
Linea 1: "Archivo1.txt" (Bien!)
Linea 2: "Archivo.txt" (Mal! Falta el !)
Linea 3: "archivo.txt" (Mal! Falta el espacio del inicio)
Así pues, podrán entender mi frustración. De verdad que esto inhabilita todo el resto de mi batch, así que me urge la ayuda de quien sepa cómo solucionarlo.
Debo acotar que sé que la función inicial (setlocal enabledelayedexpansion) suprime el signo de exclamación de algunas líneas, y que para poder verlo hay que usar el símbolo ^ al lado del mismo. Lo que no sé es cómo hacer eso aquí en en vista de que no sé cuál línea contendrá ese caracter.
De verdad agradezco la ayuda que puedan darme al respecto.