elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Problema con variable del FOR (Batch) SOLUCIONADO
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con variable del FOR (Batch) SOLUCIONADO  (Leído 6,308 veces)
<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Problema con variable del FOR (Batch) SOLUCIONADO
« en: 20 Septiembre 2009, 01:11 am »

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
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.


« Última modificación: 20 Septiembre 2009, 07:37 am por cyman » En línea

Guerrerohgp

Desconectado Desconectado

Mensajes: 44


http://guerrerohgp.blogspot.com/


Ver Perfil WWW
Re: Problema con variable del FOR (Batch)
« Respuesta #1 en: 20 Septiembre 2009, 04:51 am »

que tal dos for? no se ta ha ocurrido?
ej:
Código:
for /f "tokens=*" %%H in (dir tu directorio /b) do (set var=%%H&call:HGP)
pause

:HGP
for /f "usebackq delims==" %%a in (`type %var%`) do @echo %%a
goto:eof

creo q con esto y experimentando un poco lo logras.
 ;D ;D ;D ;D
suerte!!


En línea

<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Re: Problema con variable del FOR (Batch)
« Respuesta #2 en: 20 Septiembre 2009, 05:03 am »

Amigo, primero gracias por el interés. Estoy aquí revisando cada rato el foro porque estoy varado por eso. Ahora, quisiera algunos detalles que no entiendo bien, si no es molestia.

Yo soy nuevo programando en batch, por eso no sé algunas cosas. Por ejemplo, eso de usar el comando DIR dentro del FOR ¿cómo funciona? Yo en mi batch primero uso el dir para crear mi MiLista.log, y luego es que me traigo la lista al batch. ¿No es necesario hacer eso? ¿Podrías modificar tu ejemplo justo con los datos que yo suministré? O sea, usando el nombre del archivo que yo tengo (MiLista.log). ¿Dónde iría en ese ejemplo?

Te lo agradezco.
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Problema con variable del FOR (Batch)
« Respuesta #3 en: 20 Septiembre 2009, 05:29 am »

Si quieres trabajar con los archivos en un directorio, podrías hacer esto, más resumido:

No testeado:
Código:
for /f "tokens=*" %%_ in ('dir /b "ruta"') do (
:: Borrar los archivos :
del /f /p "%%_"
)
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Re: Problema con variable del FOR (Batch)
« Respuesta #4 en: 20 Septiembre 2009, 06:40 am »

Que tal Leo?

Probé lo que dices y funciona excepto por esto:

Código:
@echo off
set cont=0
for /f "tokens=*" %%_ in ('dir /b "ruta"') do (
       set /a cont+=1
       echo "(%cont%) %%_"
)

No me suma el %cont%. Todo el listado aparece con (0) al inicio. ¿Por qué?
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Problema con variable del FOR (Batch)
« Respuesta #5 en: 20 Septiembre 2009, 06:43 am »

Código:
@echo off
setlocal enabledelayedexpansion
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Guerrerohgp

Desconectado Desconectado

Mensajes: 44


http://guerrerohgp.blogspot.com/


Ver Perfil WWW
Re: Problema con variable del FOR (Batch)
« Respuesta #6 en: 20 Septiembre 2009, 06:44 am »

bueno , tarde no?

jeje, bueno esq la suma en for solo es valida con las variables retrasadas, osea solo se pueden llamar con
"!"
En línea

<ИΘZIЭ(ŦB>

Desconectado Desconectado

Mensajes: 109


-cyman-


Ver Perfil
Re: Problema con variable del FOR (Batch)
« Respuesta #7 en: 20 Septiembre 2009, 07:31 am »

Sí, eso es.

Bueno amigo Guerrero, aplicando la idea que me diste de los FOR pude hallar la solución que quería. Traté de implementar el otro método del amigo Leo, pero en vista de que tengo que volver a usar el delayexpansion que no me gusta, me quedo mejor con esta. Así lo hice:

Código:
@echo off
set lin=0
for /f "tokens=*" %%a in (MiLista.log) do (
        set textoLinea=%%a
        set /a lin+=1
        call:show
)
exit

:show
If not exist "%textoLinea%" call:iniSpace
echo "Línea %lin%: %textoLinea%"
goto:eof

:iniSpace
set "textoLinea= %textoLinea%"
If not exist "%textoLinea%" goto iniSpace
goto:eof

Con esto sí logro mi resultado deseado:

Código:
Linea 1: "Archivo1.txt"
Linea 2: "!Archivo.txt"
Linea 3: " archivo.txt"

Gracias de verdad por su preciado aporte! Siempre me sacan del apuro!
En línea

Guerrerohgp

Desconectado Desconectado

Mensajes: 44


http://guerrerohgp.blogspot.com/


Ver Perfil WWW
Re: Problema con variable del FOR (Batch) SOLUCIONADO
« Respuesta #8 en: 20 Septiembre 2009, 14:15 pm »

de nada.  ;D ;D ;D y pon la solucion en los demas foros para q alla no c quede como no solucionad, suerte con el resto.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(SOLUCIONADO) [ Batch ] Problemilla con variable Set /a...
Scripting
SuperDraco 9 6,909 Último mensaje 20 Marzo 2011, 11:40 am
por SuperDraco
[Batch] Como puedo validar la variable? [Solucionado] « 1 2 »
Scripting
Batitoul 13 13,073 Último mensaje 12 Septiembre 2011, 00:20 am
por leogtz
[BATCH] Variable dentro de for [SOLUCIONADO]
Scripting
DameBanda 2 3,009 Último mensaje 8 Abril 2012, 18:25 pm
por DameBanda
[SOLUCIONADO] Problema en un While + variable + io.directory.getfiles
.NET (C#, VB.NET, ASP)
Eleкtro 0 2,345 Último mensaje 30 Enero 2013, 19:32 pm
por Eleкtro
[Batch] Problema variable con comillas
Scripting
tienty 4 5,798 Último mensaje 3 Abril 2013, 13:47 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines