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:
For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
If "%%f"=="" (Echo.&Echo Cliente No Encontrado.-&Pause >Nul 2>&1& Goto :BuscarClientes)
Echo.
Echo Rut Nombre cliente
Echo %%f %%g
Pause >Nul 2>&1
Goto :BuscarClientes
)
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:
For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
If Not "%%f"=="" (
Echo.
Echo Rut Nombre cliente
Echo %%f %%g
Pause >Nul 2>&1
Goto :BuscarClientes
) ELSE (
Echo.&Echo Cliente No Encontrado.-&Pause >Nul 2>&1& Goto :BuscarClientes
)
)
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 :-[ :-[
ahora mismo se me ocurre q actives las variables retrasadas (setlocal) y en el for hagas un
set var=%%f
if not defined var (blablabla)
asi se sabe si la variable var esta vacia. otra forma es hacer un
call:etiqueta %%f %%g
y detectar con %1 y %2 si las variables estan con algo a vacias con el if "%1"==""
suerte! ;D
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
For /F "Tokens=1,2 Delims=;" %%f In ('Type "Listado_Clientes.csv" ^| Find "%Rut_Cliente%"') Do (
Call :SalidaFor %%1 %%2
)
:SalidaFor
If "%%1"="" (Echo Esta wea esta vacia xD&Pause&Goto :Eof)
Echo Rut Nombre cliente
Echo %%f %%g
y al ejecutarlo con un rut que no existe en la planilla me sale el siguiente error
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
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
companero creo q tu for esta mal deberias de poner junto al call
%%f %%g
y en la etiqueta
If "%1"=""
a ver si te funka. suerte!! ;D
edito para no doble post
tambien para el echo seria echo %1 %2
en ves de %%f %%g
Yo Uso Call :etiqueta %%A
Simplifica todo.
Saludos.
Cita de: Guerrerohgp en 8 Octubre 2009, 04:07 AM
companero creo q tu for esta mal deberias de poner junto al call
%%f %%g
y en la etiqueta
If "%1"=""
a ver si te funka. suerte!! ;D
edito para no doble post
tambien para el echo seria echo %1 %2
en ves de %%f %%g
Lamentablemente no me funciona u.u, de todas maneras gracias .... saludos y gracias por intentar ayudarme.
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
>nul
Envía la salida a nul, es decir, a la nada.
Por eso si pones:
pause>nul
No muestra el mensaje de Presione una tecla para continuar . . .
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...
Cita de: xassiz en 10 Octubre 2009, 20:16 PM
>nul
Envía la salida a nul, es decir, a la nada.
Por eso si pones:
pause>nul
No muestra el mensaje de Presione una tecla para continuar . . .
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 :)
Cita de: 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
MUCHISIMAS GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!! Es lo que andaba buscando... te lo agradezco millones ^^
saludos y que estes biieeeeeeennnn!!!
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
De nada bro para eso estamos ;)
Enotnces queda solucionado?
Cita de: xassiz en 11 Octubre 2009, 12:58 PM
De nada bro para eso estamos ;)
Enotnces queda solucionado?
seeep