Título: variables en batch Publicado por: crisoof en 11 Febrero 2015, 17:16 pm Hola de nuevo, tengo una duda existencial, estoy seguro que en algun momento resolvi esto, pero se me olvido, y no lo encuentro en la web,
tengo lo siguiente Código: FOR /F "usebackq delims=!" %%i IN (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%t1`) DO ( Código: select count(*) from errores_geom necesito pasar el valor de i a una variable local, que pueda existir fuera del for, como lo puedo lograr? y aprovechando, esa valor de la tabla, cuanta registros, se esta pasando bien a la variable %%i, aunque no exista fuera del for Saludos Gracias por su ayuda Título: Re: variables en batch Publicado por: Eleкtro en 11 Febrero 2015, 18:54 pm Cualquier variable que inicialices dentro del For seguirá existiendo tras finalizar el bloque del FOR, ¿por que piensas que no es así?,
otra cosa muy distinta sería que el output de la aplicación sqlplus.exe tuviera más de una linea, con una linea final en blanco, y en ese caso el For, al iterar las lineas, se estaría sobre-escribiendo el valor de la variable, al final asignando un valor vacio. Asegúrate de filtrar lineas vacías y/o en blanco del output, de la siguiente manera: Código: For ... in (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%t1 ^| findstr "^[^\s]"`) Do (...) Además de eso, estás dejando un espacio en blanco a la derecha del operador de asignación (Set valor= %%i)), corrígelo, utiliza la sintaxis correcta: Set "valor=%%~i". Saludos Título: Re: variables en batch Publicado por: crisoof en 11 Febrero 2015, 19:18 pm pero entoncs Elektro porque no puedo pasar a una variable %v1% el valor del %%i, que se saca de la consulta sql, esto me a pasado cada vez que e intentado entregarle ese valor a una variable %x%, lo digo porque cuando intento de usar la variable, %%i DENTRO DEL FOR POR EJEMPLO NO HAY PROBLEMA, PERO FUERA DEL FOR, AL LLAMAR A LA VARIABLE NO TIENE VALOR o Y INDICA QUE EL ECHO ESTA DESACTIVADO, perdon por las mayusculas programo con la mayuscula activa y aveces se me queda pegada la tecla
mira te explico, lo que estoy intentando de hacer es que, si la tabla errores_geom no tiene nada, siga corriendo un procedimiento, pero si esta tabla tiene un registro al menos, no siga corriendo el procedimiento, y salte a la siguiente archivo para proceder a validar si tiene errores, si tiene errores, la tabla se llena y nuevamente, salta a la siguiente archivo, esto debe tener una salida, para que la persona sepa porque se cayo para este archivo y si no le entregara los resultados esperados, tengo listo la lectura de los archivos, pasa uno por uno, el problema es que a veces esos archivos que son dibujados por personas tienen errores, por lo tanto debo ingresar esa validacion, lo que necesito es pasar el valor de esa query Citar (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%t1`) entregarla a una variable, para usarla indiscriminadamente, entre todos los batch que necesito usar, asi tbn puedo sacar el nombre de las comunas, que tambien esta almacenado en una BD, si me puedes dar alguna otra idea de como entregarle a una variable el valor de la query mas arriba, esa query solo muestra un valor, porque como indicaba es un count de la tabla, ojalas me puedas hechar una mano, o algun otro que me pueda ayudar, gracias saludos Título: Re: variables en batch Publicado por: Eleкtro en 11 Febrero 2015, 20:04 pm pero entoncs Elektro porque no puedo pasar a una variable %v1% el valor del %%i Muestra el código donde manejas las variables, el output, y te diré el por qué xD.La razón más común te la he explicado, a veces una aplicación externa agrega una linea final en blanco a la salida, a veces no percibimos esa linea vacía, y pasa eso. Pero podría haber más motivos, como por ejemplo utilizar esa variable dentro del for sin haberla expandido, aunque esa no es la causa al menos en el código que has mostrado arriba. EDITO: También podría deberse a que el output de sqlplus tuviera una codificación Unicode, y eso necesitaría otro tipo de tratamiento en la variable, ya que podría estar asignandose un valor "nulo" (en blanco). cuando intento de usar la variable, %%i DENTRO DEL FOR POR EJEMPLO NO HAY PROBLEMA, PERO FUERA DEL FOR, AL LLAMAR A LA VARIABLE NO TIENE VALOR Es que la variable %%i es una variable especial de For, no tiene vida fuera del bloque For, por otro lado, la variable "valor", como ya he comentado, si que sigue existiendo.mira te explico, lo que estoy intentando de hacer es que, si la tabla errores_geom no tiene nada, siga corriendo un procedimiento, pero si esta tabla tiene un registro al menos, no siga corriendo el procedimiento, y salte a la siguiente archivo para proceder a validar si tiene errores, si tiene errores, la tabla se llena y nuevamente, salta a la siguiente archivo, esto debe tener una salida, para que la persona sepa porque se cayo para este archivo y si no le entregara los resultados esperados, tengo listo la lectura de los archivos, pasa uno por uno, el problema es que a veces esos archivos que son dibujados por personas tienen errores, por lo tanto debo ingresar esa validacion, lo que necesito es pasar el valor de esa query entregarla a una variable, para usarla indiscriminadamente, entre todos los batch que necesito usar, asi tbn puedo sacar el nombre de las comunas, que tambien esta almacenado en una BD, si me puedes dar alguna otra idea de como entregarle a una variable el valor de la query mas arriba, esa query solo muestra un valor, porque como indicaba es un count de la tabla, ojalas me puedas hechar una mano, o algun otro que me pueda ayudar, gracias Lo siento pero como ya te digo no manejo sql/sqlplus, desconozco cual es el output que envia la aplicaicón sqlplus porque también desconozco la funcionalidad y el comportamiento de los parámetros que estás utilizando al ejecutar esa aplicación mediante la consola, aunque me hago una ligera idea no puedo evaluarlo correctamente, solo te puedo ayudar y/o orientar en lo otro. Haz una cosa, envia la salida de la aplicación sqlplus.exe a un archivo de texto plano: Código: (sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%t1)>"archivo.txt" Comprueba si el texto resultante contiene lineas vacias al final del archivo, en caso de tener lineas vacias (o con espacios en blanco) ya te indiqué como corregir el problema con la variable "valor", en caso contrario, muestra más detalles del código bat, muestra también el output de la tabla que se ha enviado al archivo de texto, y por último indica que valor de la salida es la que intentas asignar a la variable "valor". Saludos! Título: Re: variables en batch Publicado por: crisoof en 20 Febrero 2015, 14:35 pm RESOLVI EL PROBLEMA TOMANDOLO DESDE OTRO PUNTO DE VISTA (CAMBIE LA FORMA EN LA QUE CORRE EL PROCESO XD), pero lamentablemente una y otra vez me vuelvo a topar con el mismo problema, necesito hacer uso de la informacion fuera del for pero como la informacion la tiene una variable
Código: %%i Código: set %result%=%%i Edito: lo que sucede es que al tener ejemplo esto Código: for /f in %%i (sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%t1)do set Código: select count(*) from tabla Código: COUNT me gustaria saber de que manera puedo entregarle la informacion obtenida de una query o de un txt como les sea mas facil , a una variable, para poder usar esta variable CON el valor fuera del bat, gracias >:D Título: Re: variables en batch Publicado por: Eleкtro en 20 Febrero 2015, 15:31 pm no puedo hacer un Código: set %result%=%%i Jamás podrás hacer eso de esa manera, estás utilizando caracteres reservados de variable (%%) al definir el nombre de una variable. Batch no te avisará del error, pero no puedes hacer eso. me gustaria saber de que manera puedo entregarle la informacion obtenida de una query o de un txt como les sea mas facil , a una variable, para poder usar esta variable CON el valor fuera del bat, gracias >:D Código: For /F ...%%# In ('sqli... ^| Findstr "[0-9]"') Do (Set /A "Value=%%#") Con eso puedes utilizar la variable fuera del búcle del FOR, como ya comenté. Si por "utilizar la variable fuera del bat" te refieres a que una vez haya terminado todo el Script, puedas utilizar la variable en cualquier otra instancia de la CMD, entonces debes definir una variable de entorno en el sistema operativo: Código: setx "nombre" "valor" Saludos Título: Re: variables en batch Publicado por: crisoof en 20 Febrero 2015, 15:42 pm Muchas gracias Master!!, voy a probar que tal y sino molesto de nuevo xD...
VUELVO PUES NO ME RESULTO XD, ME SIGUE INDICANDO QUE EL ECHO NO ESTA ACTIVO, ES LO MISMO QUE ME INDICABA ANTES Código: FOR /F "usebackq delims=!" %%c in (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%ESTADISTICA ^|Findstr "[0-9]"`) DO ( eso es para probar y lo usare asi Código: FOR /F "usebackq delims=!" %%c in (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%ESTADISTICA ^|Findstr "[0-9]"`) DO ( Título: Re: variables en batch Publicado por: Eleкtro en 20 Febrero 2015, 16:34 pm ¿Porque usas el modificador 'usebackq' ?, estás cambiando el comportamiento de las comillas de la expresión del For, prueeba sin ese modificador.
EDITO: Ah, por cierto, el Echo del primer For no te va a funcionar por que no estás expandiendo la variable: Citar Código: FOR /F "usebackq delims=!" %%c in (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%ESTADISTICA ^|Findstr "[0-9]"`) DO ( Para que te funcione ese ejemplo que he citado, utiliza la declaración "Setlocal enabledelayedpexpansion" (y usa el símbolo !! en lugar de %% para mostrar variables) o simplemente añade un call y duplica los símbolos reservados de variable: Código: CALL ECHO %%VALUE%% EDITO 2: Te muestro un ejemplo funcional: Script1.cmd Código Script2.cmd Código Saludos Título: Re: variables en batch Publicado por: crisoof en 20 Febrero 2015, 16:59 pm ELEKTRO USO EL USEBACKQ, PORQUE SE VEZ EN EL FOR
Código: Código: Código: %path_sql% Edito DISCULPA RESPONDI SIN VERIFICAR SIQUIERA CQUE HABIAN DOS EDICIONES, VOY A BUSCAR COMO MANEJAR LA "Setlocal enabledelayedpexpansion" sorry, buscare y te cuento, gracias y saludos Título: Re: variables en batch Publicado por: Eleкtro en 20 Febrero 2015, 18:18 pm y si la devolucion no es un numero? como seteas a la variable?? xq el set /a es para numeros no? Para setear valores numéricos se añade el modificador "Set /A", para strings, simplemente "Set".si no uso el usebackq, me desconoce la palabra sqlplusy me pide inicializarla El problema no es con el nombre del exe (sqlplus.exe) sino con la variable "path_sql" que me imagino que será una variable de entorno definida por la instalación de SQL, y seguramente la variable contiene comillas dobles al principio y al final, y por eso habrás visto o leido por ahí que utilizan el modificador "usebackq", es para poder trabajar esas comillas dobles.El problema es que ese modificador altera el comportamiento de las comillas y comillas dobles, y la expresión del FOR se vuelve bastante tediosa/compleja de escribir con la sintaxis correcta, la redirección (^| Findstr...) no te va a funcionar correctamente a menos que le quites el "usebakq". Cuando se usa 'usebackq', los problemas siemrpe son por el uso inadecuado de las comillas/comillas dobles. Seguramente te estoy mareando porque, como ya comenté, no tengo el sqlplus para testear y corregir la expresión del FOR... pero prueba de esta manera, debería funcionar: Código EDITO: Por despiste puse la variable que no era en la expresión FOR (^'path_sql^' en lugar de ^'sqlPath^'), ya está correjido. ¿te funciona? Saludos Título: Re: variables en batch Publicado por: engel lex en 20 Febrero 2015, 18:24 pm crisoof no escribas en mayusculas
reglas del foro Citar I.A.1.a. Formato. El contenido dentro del foro deberá seguir unas reglas mínimas de formato, entre las cuales se encuentran: -Usar las mayúsculas de forma moderada (ver sección III.C.1.b. ). -Usar sólo colores oscuros en los mensajes, así como verde oscuro, azul, marrón y negro. -El título de los mensajes debe ser descriptivo con acuerdo al contenido. --No son descriptivos asuntos que sólo piden ayuda o hacen referencia a la temática general del tablón en los que son escritos. -Los mensajes deben ser legibles y fácilmente entendibles, esto incluye: -La fuente usada (tamaño, color y otros adornos). -El lenguaje o terminología usado (se evitarán las jergas y términos coloquiales). -La ortografía. -La redacción del mensaje (nadie podrá ayudarte si no te entiende). .... Citar III.C.1.b. Modificación de mensajes. En caso de que un mensaje no cumpla con las normas, ya sea exceso de uso mayúsculas (más de 35 mayúsculas seguidas, o más del 25% del mensaje con mayúsculas se considera excesivo), posteo de correos electrónicos, el publicarlo en el subforo incorrecto, o cualquier otra violación a las normas que no merezca que el mensaje sea borrado, será modificado o movido por algún moderador. La notificación de estas acciones es opcional para el moderador, los usuarios que deseen ser informados cuando un mensaje es movido, pueden habilitar la notificación de sus temas. si quieres resaltar un mensaje tienes muchas formas Título: Re: variables en batch Publicado por: crisoof en 23 Febrero 2015, 12:50 pm hola de nuevo, disculpa por no contestar de inmediato pero al irme del trabajo me desconecto de esto xD, también sorry por las mayúsculas pero como programa en mayúsculas se me queda muchas veces el mayúscula activado y se me olvida, igualmente las dejare como minúsculas aunque sea código
hice lo que me habías planteado, primero le hice un par de modificaciones a lo que me habías pasado, CON LAS MODIFICACION ANDA DE MARAVILLA ;-) ;-) :laugh: :laugh: :rolleyes: ::), muchas gracias dejo el código corregido, por si a alguien le sirve aunque no creo, porque mis errores son tan específicos como tontos xD Código 2 bath, prueba.bat Código: @ECHO OFF Saludos |