Título: Problema al guardar nombre de archivo en variable (batch) SOLUCIONADO Publicado por: <ИΘZIЭ(ŦB> en 17 Septiembre 2009, 06:04 am 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): Código: Archivo1.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: Código: set lin=0 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. Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: xassiz_ en 17 Septiembre 2009, 14:54 pm A lo mejor te sirve un delims..
Código: for /f "delims= " %%%% in () do () Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: <ИΘZIЭ(ŦB> en 17 Septiembre 2009, 20:37 pm No amigo. No funciona. Sigue trayéndose el texto sin el espacio en blanco inicial.
¿Alguna otra sugerencia? Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: FranciskoAsdf en 19 Septiembre 2009, 16:58 pm A ver según lo que entiendo es que llamas a cada archivo para realizar alguna operación, a mi se me ocurre que podrias hacer un IF EXIST o no? por ejemplo:
nose si funcione solo es una idea nada mas xD (no soy muy bueno con los FOR xD) Código: set lin=0 Espero que te sea de ayuda, pero si no nada que hacer, y porfa no me puteen xDDDD Saludos =) Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: <ИΘZIЭ(ŦB> en 19 Septiembre 2009, 17:18 pm 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.
Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: <ИΘZIЭ(ŦB> en 19 Septiembre 2009, 18:05 pm Listo! Fue más fácil de lo que pensé. Solo usé el IF EXIST y bastó. Fíjate:
Código: set lin=0 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. Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: FranciskoAsdf en 19 Septiembre 2009, 18:51 pm De nada, pense que no funcionaria, ya que soy un poko rustico para codificar xD, ahora lo del nombre del archivo, podrias usar y mezclar los siguientes comandos:
Código: %~f1 - regresa la ruta y el archivo de %1. osea si quiiseras saber la ura y el nombre de un archivo deberia ser algo asi set "nombrearchivo=%~f1" pero debes pasarle como variable el nombre del archivo, osea podrias hacer una funcion: :RutaYNombreDeArchivo echo %~f1 GOTO :eof y despues la llamas cuando la necesites call :RutaYNombreDeArchivo a.txt algo asi deberia ser ^^ saludos xD estoy en mi trabajo pero es cosa de investigar :) Título: Re: Problema al guardar nombre de archivo en variable[batch] Publicado por: <ИΘZIЭ(ŦB> en 20 Septiembre 2009, 22:12 pm Bueno amigos del foro, les cuento que hallé una forma para contrarrestar este error que presenta la variable del FOR. Pude conseguirla gracias a la ayuda de unos compañeros, y pueden encontrarla en el otro tema relacionado que publiqué. Este es el enlace:
http://foro.elhacker.net/scripting/problema_con_variable_del_for_batch_solucionado-t268022.0.html Gracias de nuevo. Título: Re: Problema al guardar nombre de archivo en variable (batch) SOLUCIONADO Publicado por: Aranguez en 22 Septiembre 2009, 01:12 am Hola buenas noches, no llevo mucho tiempo en esto pero me intereso tu problema y lo simulé, a mi me funciona con cualquier cantidad de espacios con este codigo, si lo pules un poquito seguro que te funcionará:
@echo off setlocal EnableDelayedExpansion del salida.txt @FOR /F "tokens=* delims=" %%a IN ('type c:\lista.txt') DO ( echo %%a>>salida.txt ) |