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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Consulta sobre comandos dentro de FOR [RESUELTO!]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre comandos dentro de FOR [RESUELTO!]  (Leído 3,423 veces)
plancha_hd

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Consulta sobre comandos dentro de FOR [RESUELTO!]
« en: 7 Octubre 2014, 16:55 pm »

Buenas tardes gente del foro, pongo un nuevo tema porque luego de buscar mucho por los ya creados y por el resto de internet no encontre respuesta a mi problema. Caculo debe ser bastante simple, pero batch me tiene a mal traer.

El tema es asi, quiero guardar la salida de un comando en una variable, para lo cual entiendo tengo que usar la siguiente estructura:

Código
  1. For /F "Tokens=*" %%# in ('comando1 ^| comando2') Do (Set "Variable=%%#").

El problema es que cuando el comando es "echo", el Do cambia de color y no toma el for. Siendo mas puntual, quiero hacer:

Código
  1. FOR /F %%A IN ( ' echo %%A  ^| grep -o ../../ ' ) DO ( set variable=%%A)
y no me funciona, de por si lo que necesito leer esta en un txt, probe concatenando dos for, ejemplo:


 
Código
  1.  FOR /F %%A IN ( ' prueba.txt ' ) DO (
  2.                        FOR /F %%B IN ( ' echo %%B  ^| grep -o ../../ ' ) DO (
  3.                                  set variable=%%B)
  4.             )  

y nada, probe muchas alternativas pero no logro conseguir que lo que tengo en un txt, me lo guarde formateado en una variable para poder trabajar.

Espero haber sido claro y agradezco de antemano cualquier ayuda!.

Saludos


« Última modificación: 7 Octubre 2014, 21:54 pm por plancha_hd » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Consulta sobre comandos dentro de FOR
« Respuesta #1 en: 7 Octubre 2014, 18:58 pm »

Buenas

1) ¿Estás utilizando la aplicación externa Grep, el puerto para Windows?

2) ¿Cual es la intención del parámetro -o de Grep, que se supone que debe conseguir?

Para leer el contenido de un archivo de texto has de utilizar el comando Type, no Echo.

Código
  1. For /F "UseBackQ Tokens=* Delims=" %%# In (
  2. "Archivo.txt"
  3. ) Do (
  4. Echo %%~#
  5. )


Si tu intención es añadir más de una linea de texto a una variable entonces debes saber que Batch no soporta variables multilinea por naturaleza, es un lenguaje muy simple y debes recurrir a un pequeño hack para conseguirlo, y si piensas trabajar una variable multilinea lo tendrás algo dificil para manejarla de forma natural como se haria en otro lenguaje.

Código:
@Echo OFF & setlocal EnableDelayedExpansion

REM Dejar un espacio de 2 lineas vacias:
set NewLine=^


REM Fin de las lineas vacias.

set "MultiLine="

For /F "UseBackQ Tokens=* Delims=" %%# In (
"Archivo.txt"
) Do (
  Set "MultiLine=!MultiLine!%%#!NewLine!"
)

Echo !MultiLine!

Pause&Exit /B 0

Saludos


En línea



plancha_hd

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Consulta sobre comandos dentro de FOR
« Respuesta #2 en: 7 Octubre 2014, 20:52 pm »

De antemano mil gracias por la ayuda Elektro!.

1) Si, grep de gnuwin32 porque me estaba volviendo loco para formatear la salida jeje.
2) -o es "only-matching", o sea, muestra solo lo que coincide con la condición que le doy, en mi caso "../../".

Mi primer error es el que me marcas, creo que va type no echo en lo que quiero hacer.
Creo que en realidad no necesito variables multilinea, la cosa es asi:

En un txt tengo las fechas de creación de unos archivos que tiene un directorio (las extraje con forfiles), luego quiero leer el archivo e ir guardándolas en una variable para trabajar, porque no todas las fechas me sirven, entonces mi idea es recorrer el txt y aquellas fechas que no sean "01/**/" las guarde aparte (en otro txt por ejemplo), porque una vez pasada esa condición voy a borrar todos los archivos que contengan la fecha que tiene ese ultimo txt. No se si necesito multilinea porque el contenido de la variable quiero que cambie con cada iteracion del for. Espero haber podido explicarme mejor.

Muchas gracias por ayudar!. Saludos!
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Consulta sobre comandos dentro de FOR
« Respuesta #3 en: 7 Octubre 2014, 21:08 pm »

Mi primer error es el que me marcas, creo que va type no echo en lo que quiero hacer.

Ahora que reviso el código que te mostré, se me olvidó comentar que en un For no es necesario usar el comando Type para leer el contenido de un txt (un ejemplo, el For que te mostré), pero en el For que tu usase si, debiste user Type en lugar de Echo para pasarle la salida a Grep, con Echo solo estás escribiendo el nombre del archivo, no accediendo a su contenido.


Creo que en realidad no necesito variables multilinea, la cosa es asi:

En un txt tengo las fechas de creación de unos archivos que tiene un directorio (las extraje con forfiles), luego quiero leer el archivo e ir guardándolas en una variable para trabajar, porque no todas las fechas me sirven, entonces mi idea es recorrer el txt y aquellas fechas que no sean "01/**/" las guarde aparte (en otro txt por ejemplo), porque una vez pasada esa condición voy a borrar todos los archivos que contengan la fecha que tiene ese ultimo txt. No se si necesito multilinea porque el contenido de la variable quiero que cambie con cada iteracion del for. Espero haber podido explicarme mejor.

Pues no, ahora que has explicado lo que pretendes hacer, si tu intención es filtrar un txt para pasar unas fechas a otro txt no necesitas usar variables, ni siquiera necesitas Grep, ya que puedes utilizar el comando FINDSTR.

Ejemplo:
Código
  1. (Type "Fechas.txt" | Findstr /V "^01\/..\/....$")> "Nuevo.txt"


Fechas.txt

Código:
01/01/2011
12/10/2012
01/07/2012
10/09/2013
30/10/2010
01/12/2010
01/03/2014
18/05/2014
01/07/2014
19/11/2014

Nuevo.txt
Código:
12/10/2012
10/09/2013
30/10/2010
18/05/2014
19/11/2014

Saludos.
« Última modificación: 7 Octubre 2014, 21:11 pm por Eleкtro » En línea



plancha_hd

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Consulta sobre comandos dentro de FOR
« Respuesta #4 en: 7 Octubre 2014, 21:53 pm »

SIIIIIII   ;D ;D ;D ;D me funciono!!, era justo lo que quería!. Mil gracias por la enorme mano que me diste, dos días entero busque data de como hacer.

Copio y pego como me quedo el código del for por si a alguien mas le resulta útil, porque le hice mínimas modificaciones porque no me buscaba bien:

Código:
FOR /F %%A IN ( Viejo.txt ) DO ( 
( Type Viejo.txt | Findstr /V ^01/../.... ) > Nuevo.txt )
type nuevo.txt | sort


Saludos, y gracias again!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines