Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - <ИΘZIЭ(ŦB>

#61
Cómo están amigos del foro?

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

Archivo1.txt
!Archivo.txt
archivo.txt


Esa es mi lista. El código del batch es:


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:


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.
#62
Listo! Fue más fácil de lo que pensé. Solo usé el IF EXIST y bastó. Fíjate:


set lin=0
for /f "tokens=*" %%a in (Lista.txt) do (
       set /a lin+=1
       If exist "%%a" call set list!lin!="%%a"
       If not exist "%%a" call set list!lin!=" %%a"
)


Así de fácil! De verdad gracias compañero!

Ahora bien, me pasa por la mente la posibilidad de que en algún momento me encuentre con un archivo que tenga más de un espacio en blanco, ante lo cual no funcionaría este código. En ese caso sí es necesario hacer un ciclo, aunque no sé si con un FOR. Voy a probar. Aunque me gustaría saber si hay una manera de detectar el nombre real de un archivo con espacios y todo con algún parámetro. Si alguien sabe se lo agradezco.
#63
Gracias amigo! Es una buena idea! Había estado pensando en alternativas ya que no me habían respondido, pero no hallaba ninguna, y esa es una muy buena. Ya mismo voy a probarla y luego te cuento.
#64
No amigo. No funciona. Sigue trayéndose el texto sin el espacio en blanco inicial.

¿Alguna otra sugerencia?
#65
Qué tal amigos del foro! Otra vez yo por aquí.

Acabo de toparme con un detallito que me complica la vida. Resulta que tengo un .txt que contiene enlistados los nombres de varios archivos en una carpeta. Luego recupero esos nombres y los guardo en una variable tipo matriz (o como se le llame), para lo cual uso el comando CALL SET dentro de un ciclo FOR, como me enseñaron aquí.

En fin, el problema es que hay archivos que tienen un espacio al inicio del nombre, pero la variable del FOR (%%a) se lo quita, lo que me deja ineficiente el script.

Déjenme mostrárselo:

Supongamos que esta es mi lista (Lista.txt):

Archivo1.txt
Archivo2.txt
Archivo3.txt
Archivo4.txt


Como ven, la línea 3 tiene almacenado el nombre de un archivo, pero ese espacio al inicio no es un error al crear la lista, sino que el archivo se llama así: " Archivo3.txt".
Ok. Entonces, para crear mi variable con los valores de cada línea hago esto:


set lin=0
for /f "tokens=*" %%a in (Lista.txt) do (
      set /a lin+=1
      call set list!lin!="%%a"
)


En este punto la variable list ya contiene el nombre de cada línea por separado, pero con el detalle de que la línea tres no se guardó así: " Archivo3.txt", como debería, sino así: "Archivo3.txt", lo cual inevitablemente me produce un error posteriormente.

Pues bien, tras haber analizado de dónde surge el error, noté que es en la variable del FOR (%%a); esta no se trae el valor con el espacio en blanco inicial, sino que lo quita. Por eso luego se guarda en la variable list de ese modo.

Así pues, ¿qué medida puedo tomar para recuperar el texto de la línea 3 tal cual como está en List.txt, con su respectivo espacio en blanco inicial? De verdad agradezco previamente su valiosa ayuda.
#66
¡Esooooo...! ¡Gracias de verdad! ¡Uds como siempre ayudándonos a aprender más! Ojalá algún día pueda devolverles el favor.
#67
Saludos compañeros del foro.

Tengo un pequeño problemita. Estoy intentando comparar una ruta introducida a mano en un archivo por lotes con una ruta que obtengo del sistema, y resulta que la que el sistema me da viene en mayúsculas, de modo que en la sentencia If en que las comparo no coinsiden, y no se ejecuta el código, por supuesto.

Así pues, me gustaría saber cómo hacer para tomar la ruta que el usuario indico (que está almacenada en una variable) y convertirla a mayúsculas antes de compararlas. ¿Se puede? Agradezco su ayuda.
#68
Aún no lo he probado, pero me gustaría saber si %variable:~-1% es para mostrar el último caracter. No me sabía esa función. ¿Sí es para eso?
#69
Bueno, lo que necesito es saber si el último caracter de una variable string es slash (\) o no. Ya me ayudaron con el código para almacenar el último caracter; eso lo tengo listo. Lo único que me hace falta es establecer la condición que debe cumplirse cuando el caracter sea slash.

Como ya he mencionado, la sentencia común del If (If ["%variable%"]==["\"]) no quiere funcionarme. Así que estoy atado de manos pues no sé qué otra cosa hacer. Esa es toda la ayuda que necesito.

Estaré pendiente de tu respuesta.
#70
Bueno pana, si quieres pruebas después y me dices. Gracias por todo.