Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: FranciskoAsdf en 7 Octubre 2009, 16:52 pm



Título: [DUDA xD]IF Dentro De Un FOR?[SOLUCIONADO!]
Publicado por: FranciskoAsdf en 7 Octubre 2009, 16:52 pm
Hola Yo De Nuevo u.u...... tengo una duda dudosa xD, se puede hacer una compracion  si una variable está vacía dentro de un FOR ?  Ej:

Código
  1. For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
  2. If "%%f"=="" (Echo.&Echo Cliente No Encontrado.-&Pause >Nul 2>&1& Goto :BuscarClientes)
  3. Echo Rut Nombre cliente
  4. Echo %%f %%g
  5. Pause >Nul 2>&1
  6. Goto :BuscarClientes
  7. )
  8.  

Por ejemplo ahí después de hacer el FOR en el archivo, quiero saber si la variable quedó vacía o no, para así poder saber si existe o no el cliente en el archivo, pero no hace la comparación u.u y solo me da los dos pauses  :-\, también probé con:

Código
  1. For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
  2. If Not "%%f"=="" (
  3. Echo Rut Nombre cliente
  4. Echo %%f %%g
  5. Pause >Nul 2>&1
  6. Goto :BuscarClientes
  7. ) ELSE (
  8. Echo.&Echo Cliente No Encontrado.-&Pause >Nul 2>&1& Goto :BuscarClientes
  9. )
  10. )
  11.  

Pero ahí si que se cae el código xD, entonces ..... mi pregunta es ...

¿Cómo puedo saber si la variable %%f está vacía?, o ¿Cómo saber si no se encontró el cliente?


..........


Muchas Gracias de ante mano y saludos  :-[ :-[


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: Guerrerohgp en 7 Octubre 2009, 21:22 pm
ahora mismo se me ocurre q actives las variables retrasadas (setlocal) y en el for hagas un
Código:
set var=%%f
if not defined var (blablabla)

asi se sabe si la variable var esta vacia. otra forma es hacer un
Código:
call:etiqueta %%f %%g

y detectar con %1 y %2 si las variables estan con algo a vacias con el if "%1"==""

suerte! ;D



Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: FranciskoAsdf en 7 Octubre 2009, 22:19 pm
No Me Funciona la primera, porke no tengo idea de como usar las variables retardadas :S

y el segundo lo aplique ais y tampoco me funciona

Código
  1. For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
  2. Call :SalidaFor %%1 %%2
  3. )
  4. :SalidaFor
  5. If "%%1"="" (Echo Esta wea esta vacia xD&Pause&Goto :Eof)
  6. Echo Rut Nombre cliente
  7. Echo %%f %%g
  8.  

y al ejecutarlo con un rut que no existe en la planilla me sale el siguiente error

Código:
Escriba "menu" (sin las comillas) para volver al menu principal.-
Ingrese El Rut Del Cliente Que Necesita Buscar.-

Rut: 5.555.555-5

Buscando Espere...
El sistema no puede hallar el archivo especificado.
No se esperaba ="" en este momento.

no hay alguna otra forma D:?

muchas gracias de todas maneras u.u


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: flony en 8 Octubre 2009, 03:45 am
a ver en esto aprendiz...pero la variable tengo entendido la guarda en la ram..hasta q no apagues la pc o le des de vuelta un valor...va a seguir teniendo el mismo valor deberias tratar con un goto y un set darle un valor cero..asi estarias seguro...digo si estoy equivocado me avisan


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: Guerrerohgp en 8 Octubre 2009, 04:07 am
companero creo q tu for esta mal deberias de poner junto al call
Código:
%%f %%g

y en la etiqueta
Código:
If "%1"=""

a ver si te funka. suerte!! ;D

 edito para no doble post

tambien para el echo seria
Código:
echo %1 %2

en ves de %%f %%g


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: 0x5d en 9 Octubre 2009, 02:16 am
Yo Uso Call :etiqueta %%A
Simplifica todo.


Saludos.


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: FranciskoAsdf en 9 Octubre 2009, 16:31 pm
companero creo q tu for esta mal deberias de poner junto al call
Código:
%%f %%g

y en la etiqueta
Código:
If "%1"=""

a ver si te funka. suerte!! ;D

 edito para no doble post

tambien para el echo seria
Código:
echo %1 %2

en ves de %%f %%g

Lamentablemente no me funciona u.u, de todas maneras gracias .... saludos y gracias por intentar ayudarme.


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: Aranguez en 10 Octubre 2009, 17:09 pm
Hola Panxin,
ajusta este codigo al tuyo y pruebalo

SET ESTA=NO

For /F "Tokens=1,2 Delims=;" %%f In ('Type "Lista.txt" ^| Find /I "%Rut_Cliente%"') Do (
SET ESTA=SI
ECHO AQUI VA EL PROCESO CUANDO EXISTE
)

IF %ESTA% ==NO ECHO AQUI PROCESAS SI NO EXISTE "%Rut_Cliente%"

Por cierto me podrías explicar esta instrucción que tienes al final de tu codigo?, el pause se que da una pausa pero el resto no lo entiendo.

Pause >Nul 2>&1

Saludos


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: xassiz_ en 10 Octubre 2009, 20:16 pm
Código:
>nul
Envía la salida a nul, es decir, a la nada.

Por eso si pones:
Código:
pause>nul
No muestra el mensaje de Presione una tecla para continuar . . .

Código:
2>&1

Pues tiene que ver con los operadores de redireccion, pero con controladores.

La siguiente tabla muestra los operadores que se pueden utilizar para redirigir la entrada y la salida de los comandos.

Operador de redirección   Descripción
>    Escribe la salida del comando en un archivo o un dispositivo, en lugar de en la ventana del Símbolo del sistema.
<     Lee la entrada del comando desde un archivo, en lugar de leerla desde el teclado.
>>     Añade la salida del comando al final de un archivo sin eliminar la información que ya está en el archivo.
>&     Escribe la salida de un controlador en la entrada de otro controlador.
<&     Lee la entrada desde un controlador y la escribe en la salida de otro controlador.
|     Lee la salida de un comando y la escribe en la entrada de otro comando. También se denomina canalización.

De forma predeterminada, la entrada del comando (es decir, el controlador STDIN) se envía desde el teclado a Cmd.exe y, a continuación, Cmd.exe envía la salida del comando (es decir, el controlador STDOUT) a la ventana del Símbolo del sistema.

La siguiente tabla muestra los controladores disponibles.

Controlador Equivalente numérico del controlador Descripción
STDIN    0 Entrada de teclado
STDOUT   1 Salida en la ventana del Símbolo del sistema.
STDERR    2 Salida de errores en la ventana del Símbolo del sistema.
UNDEFINED 3-9 Estos controladores están definidos individualmente por la aplicación y son específicos para cada programa.

Bien eso es redireccion de la entrada y salida de los comandos...
Se usa 2>&1 por que 2 si es que leiste lo que puse arriba es STDERR osea que si ocurre un error no se mostrara ya que redirije el error ha &1...


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: FranciskoAsdf en 11 Octubre 2009, 01:16 am
Código:
>nul
Envía la salida a nul, es decir, a la nada.

Por eso si pones:
Código:
pause>nul
No muestra el mensaje de Presione una tecla para continuar . . .

Código:
2>&1

Pues tiene que ver con los operadores de redireccion, pero con controladores.

La siguiente tabla muestra los operadores que se pueden utilizar para redirigir la entrada y la salida de los comandos.

Operador de redirección   Descripción
>    Escribe la salida del comando en un archivo o un dispositivo, en lugar de en la ventana del Símbolo del sistema.
<     Lee la entrada del comando desde un archivo, en lugar de leerla desde el teclado.
>>     Añade la salida del comando al final de un archivo sin eliminar la información que ya está en el archivo.
>&     Escribe la salida de un controlador en la entrada de otro controlador.
<&     Lee la entrada desde un controlador y la escribe en la salida de otro controlador.
|     Lee la salida de un comando y la escribe en la entrada de otro comando. También se denomina canalización.

De forma predeterminada, la entrada del comando (es decir, el controlador STDIN) se envía desde el teclado a Cmd.exe y, a continuación, Cmd.exe envía la salida del comando (es decir, el controlador STDOUT) a la ventana del Símbolo del sistema.

La siguiente tabla muestra los controladores disponibles.

Controlador Equivalente numérico del controlador Descripción
STDIN    0 Entrada de teclado
STDOUT   1 Salida en la ventana del Símbolo del sistema.
STDERR    2 Salida de errores en la ventana del Símbolo del sistema.
UNDEFINED 3-9 Estos controladores están definidos individualmente por la aplicación y son específicos para cada programa.

Bien eso es redireccion de la entrada y salida de los comandos...
Se usa 2>&1 por que 2 si es que leiste lo que puse arriba es STDERR osea que si ocurre un error no se mostrara ya que redirije el error ha &1...


muchas gracias por explicar xassiz, no tenia idea del "porque" se usaba asi la redireccion ^^

saludos y voy a probar la opcion de aranguez :)


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: FranciskoAsdf en 11 Octubre 2009, 01:29 am
Hola Panxin,
ajusta este codigo al tuyo y pruebalo

SET ESTA=NO

For /F "Tokens=1,2 Delims=;" %%f In ('Type "Lista.txt" ^| Find /I "%Rut_Cliente%"') Do (
SET ESTA=SI
ECHO AQUI VA EL PROCESO CUANDO EXISTE
)

IF %ESTA% ==NO ECHO AQUI PROCESAS SI NO EXISTE "%Rut_Cliente%"

Por cierto me podrías explicar esta instrucción que tienes al final de tu codigo?, el pause se que da una pausa pero el resto no lo entiendo.

Pause >Nul 2>&1

Saludos

MUCHISIMAS GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!! Es lo que andaba buscando... te lo agradezco millones ^^


saludos y que estes biieeeeeeennnn!!!


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: Aranguez en 11 Octubre 2009, 01:37 am
Me alegra Panxin que te haya servido, también quiero agradecer xassiz, muy buena su respuesta a mi duda y muy buena explicación.

Saludos


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: xassiz_ en 11 Octubre 2009, 12:58 pm
De nada bro para eso estamos ;)

Enotnces queda solucionado?


Título: Re: [DUDA xD]IF Dentro De Un FOR?
Publicado por: FranciskoAsdf en 12 Octubre 2009, 15:17 pm
De nada bro para eso estamos ;)

Enotnces queda solucionado?

seeep