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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  duda con FOR
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda con FOR  (Leído 2,392 veces)
crisoof

Desconectado Desconectado

Mensajes: 48


Ver Perfil
duda con FOR
« en: 24 Febrero 2015, 13:26 pm »

hola nuevamente xD, volvi con mis preguntas raras xD

tengo el siguiente codigo
Código:
@echo off
echo    éíííííííííííííííííííííííííííííííííííííííííííííííííííííííííí»
echo    º       shapes de los errores encontrados en archivos      º
echo    èíííííííííííííííííííííííííííííííííííííííííííííííííííííííííí¼

for /f "delims=! usebackq" %%c in (`sqlplus -s %conexion% @%path_sql%t`) do set res=%%c
fme.exe %path_fme%errores_archivos.fmw --comuna %res% --destdataset_oracle8i_db orcl_qa --out_user qa_datac --out_password qa_dc
echo  %res%
pause

los -- indican que viene un parametro, luego el nombre del parametro y el valor para el parametro
la %path_fme% ruta donde esta almacenado el archivo para que se ejecute con el programa fme
la %path_sql% es la ruta donde se almacenan los archivos de extension .sql osea las querys para la BD

el asunto es que el for no se cierra solo, me pide cerrarlo a mano escribiendo exit cuando el bat esta ejecutandoce y si al bat le dejo escrito exit me termina el bat, hay alguna forma de obligar a cerrar el for?

t solo es una consulta que dice
Código:
select nombre_comuna from var_comuna
(var comuna mi tabla), este valor lo rescato y se lo paso a %res% quien llenara comuna que servirá para hacer un log del programa fme
eso muchas gracias, ojala que lo pueda cerrar o me puedan orientar por que no se cierra solo el for....

Ahh se me olvidaba el For no tiene las llaves o parentesis () porque si le pongo los parentesis si o si me pedira que lo cierre yo mismo y luego de eso pasa al siguiente bat, en todos los otros bat al dejarlo sin los paréntesis termina de iterar y vuelve al for que lo llamo o sigue con lo siguiente

gracias, :silbar:
Saludos

EDITO: lo modifique para explicar un poco mejor unas variables  y unas comas que le daban otro sentido a mi explicacion


« Última modificación: 24 Febrero 2015, 13:49 pm por crisoof » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: duda con FOR
« Respuesta #1 en: 24 Febrero 2015, 14:41 pm »

1. En la expresión del FOR debes utilizar la comilla ' para encerrarla, no este caracter de acentuación `


2. Batch no puede "pedir el cierre de de un bloque de código abierto añadiendo el comando Exit", especifica claramente cual es el mensaje de error que se muestra en consola (aunque obviamente el mensaje sea un error de sintaxis).


3. El bloque del FOR deberías tratar de cerrarlo usando los operadores de agrupación () más que nada para no caer en malas prácticas de programación que conllevan inevitablemente a posibles errores de ejecución (sobre todo de sintaxis, al concatenar comandos en un bloque abierto de FOR), cierra el bloque sí o sí.

Si tras cerrarlo tienes algún problema/error, especifica el error e intenta solucionarlo por los medios adecuados que no sea dejar abierto el bloque del FOR.
Puedes empezar por encerrar también la variable, ya que no estás utilizando la sintaxis apropiada y dependiendo de las circunstancias (el valor de %%c) eso puede resultar en conflictos de sintaxis.

Código:
For /F ... In (...) Do (Set "res=%%c")


4. Ten en cuenta que, en caso de que la variable "%path_sql%" no contenga comillas dobles al principio y al final, y si además la ruta contuviese caracteres reservados por el sistema (ej: C:\Program Files (x86)\sql\ ) entonces ahí tienes el motivo del error, o mejor dicho del cierre inesperado de la consola, debido a un conflicto de sintaxis al intentar parsear los falsos operadores de agrupación por haber dejado la cadena de string abierta, para solucionarlo, encierra el string debidamente.


5. Aplica también las mismas reglas de cierre de string a esta instrucción (repito, en caso de que no estén cerrados, porque por lo que muestras no lo puedo saber:
Citar
Código:
fme.exe %path_fme%errores_archivos.fmw --comuna %res% --destdataset_oracle8i_db orcl_qa --out_user qa_datac --out_password qa_dc

Por norma general las rutas con espacios en el nombre deben encerrarse usando comillas dobles para poder pasarlo como argumento, ya que cada argumento está delimitado por un espacio y por ende una ruta abierta y con espacios será una ruta dividida en varios argumentos para la aplicación, la ruta completa será irreconocible debido a que el recuento de parámetros será incorrecto.

Lo mismo se aplica a cualquier valor de string que quieras pasarle a un parámetro (tenga o no espacios, es lo correcto):
Código:
fme.exe "%path_fme%errores_archivos.fmw" --comuna "%res%" --destdataset_oracle8i_db "orcl_qa" --out_user "qa_datac" --out_password "qa_dc"

Saludos


« Última modificación: 24 Febrero 2015, 14:51 pm por Eleкtro » En línea

crisoof

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: duda con FOR
« Respuesta #2 en: 24 Febrero 2015, 16:45 pm »

1. modificado el codigo a lo que deberia estar correcto como buena practica
Código
  1. @echo off
  2. echo    ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  3. echo    º           SHAPES DE LOS ERRORES ENCONTRADOS              º
  4. echo    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
  5.  
  6.  
  7. For /F "Tokens=* Delims=" %%a In ('""sqlplus.exe" -s QA_DATAC/qa_dc@orcl_qa @%sqlPath%t"')  do (set res=%%c
  8. fme.exe "%PATH_FME%SHAPE_ERRORES.fmw" --COMUNA "%res%" --DestDataset_ORACLE8I_DB "ORCL_QA" --OUT_USER "QA_DATAC" --OUT_PASSWORD "qa_dc"
  9. )
quedo en la misma face que el anterior, ejecuta todo sin problemas hasta que tiene que cerrarse el for de echo, si lo analizo bn esto queda pausado antes de llamar al programa FME.EXE

2. Batch no puede "pedir el cierre de de un bloque de código abierto añadiendo el comando Exit", especifica claramente cual es el mensaje de error que se muestra en consola (aunque obviamente el mensaje sea un error de sintaxis).
R.- la consola no me muestra ni un error, la consola no se cierra, sigue ejecutando mi programa, si no escribo nada, queda eternamente ahi, el prompt puede escribir o saltar espacios, solo despues que escribo exit, sigue con la parte que falta del bat

3. El bloque del FOR deberías tratar de cerrarlo usando los operadores de agrupación () más que nada para no caer en malas prácticas de programación que conllevan inevitablemente a posibles errores de ejecución (sobre todo de sintaxis, al concatenar comandos en un bloque abierto de FOR), cierra el bloque sí o sí.
R.- corregido en pto 1

4. Ten en cuenta que, en caso de que la variable "%path_sql%" no contenga comillas dobles al principio y al final, y si además la ruta contuviese caracteres reservados por el sistema (ej: C:\Program Files (x86)\sql\ ) entonces ahí tienes el motivo del error, o mejor dicho del cierre inesperado de la consola, debido a un conflicto de sintaxis al intentar parsear los falsos operadores de agrupación por haber dejado la cadena de string abierta, para solucionarlo, encierra el string debidamente.
R.-no se cuales serian las palabras reservadas del sistema, para evitar esto en la declaracion le coloco las "" o al momento de usar esta variable la uso con "" ?... de todas maneras la ruta que tienen todas las path_XX es \\111.111.11.111\qa_datac\ENTRADA\

si esta variable tiene que ser usada con "", como se esta usando en el mismo ejemplo, deberia tener comillas por si sola? me explico
Código
  1. DEL ""%PATH_SQL%"ESTADISTICA.SQL"--¿?

5. Aplica también las mismas reglas de cierre de string a esta instrucción (repito, en caso de que no estén cerrados, porque por lo que muestras no lo puedo saber:
Por norma general las rutas con espacios en el nombre deben encerrarse usando comillas dobles para poder pasarlo como argumento, ya que cada argumento está delimitado por un espacio y por ende una ruta abierta y con espacios será una ruta dividida en varios argumentos para la aplicación, la ruta completa será irreconocible debido a que el recuento de parámetros será incorrecto.

Lo mismo se aplica a cualquier valor de string que quieras pasarle a un parámetro (tenga o no espacios, es lo correcto):
Código:
fme.exe "%path_fme%errores_archivos.fmw" --comuna "%res%" --destdataset_oracle8i_db "orcl_qa" --out_user "qa_datac" --out_password "qa_dc"
R.- Modificado tambien en Pto 1


PERDÓN PERDÓN  :-[ :-[ :-[ :-[ ;D ;D ... EL ERROR NO ESTA EN EL FOR, me dedique a verificar si estaba bn, porque al hacer las modificaciones que me indicasteme di cuenta que tambien funcionaba la llamada al programa FME, le puse pauses por doquier xD, hasta que di con el error, no se si es que me puedes ayudar porque es una mezcla entre Sql y el Bat tengo un codigo gigante, solo te mostrare el error para no marear
Código
  1. DEL "%PATH_SQL%ESTADISTICA.SQL"
  2. ECHO EXEC SP_VALIDACION_GEOMETRIAS;>>"%PATH_SQL%ESTADISTICA.SQL"
  3. ECHO EXIT>>"%PATH_SQL%ESTADISTICA.SQL"
  4. sqlplus %conexion% @%PATH_SQL%ESTADISTICA.SQL
  5.  
  6. sqlplus %conexion% @%PATH_SQL%COUNT.SQL rem <-- el desgraciado esta aca
  7. CALL "%PATH_SCRIPT%VAR_ERRORES.BAT" rem --> aqui pense que estaba el error

eso que vez, es una llamada una query de oracle, conexion tiene la contraseña/user/service @bla...bla es la llamada a count que es un archivo almacenado en la ruta que esta en Path_SQL, el archivo tiene esccrito esto
Código
  1. SELECT COUNT(*) FROM errores_geom; -- en oracle las sentencias se terminan con un ;
  2. /* en la segunda linea dice */ exit -- sin ;
el exit es para que pueda salir de la llamada desde el bath, pero no la esta tomando, aqui es donde te pido ayuda a ti, se supone que escribiendole al archivo exit sale de la query, pero no lo hace, me hecharias una mano? que puede ser?
Saludos y perdon por la equivocacion de antes... aaa de todas maneras me puedes responder lo que esta en Rojo en el punto 4, para saber para una, siguiente vez

 Saludos y gracias por tu ayuda y sorry por la mezcla de etiquetas, intente dejarlo ordenado pero parece que no me funciono xD...Ahi si, tenia una etiqueta de citar de mas
« Última modificación: 1 Marzo 2015, 19:52 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: duda con FOR
« Respuesta #3 en: 1 Marzo 2015, 19:57 pm »

de todas maneras me puedes responder lo que esta en Rojo en el punto 4, para saber para una, siguiente vez

Tanto al declararla:
Código:
Set "Var=C:\ruta con espacios"

Cómo al usarla:
Código:
Echo "%Var%"

Las comillas dobles en la declaración son para evitar errores de sintaxis, no para añadirle comillas dobles al string, ej:

Bien:
Código:
Set "Var=C:\ruta con espacios" & Echo ready

Mal:
Código:
Set Var=C:\ruta con espacios & Echo ready

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,706 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 5,739 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
Ngeooz 6 8,803 Último mensaje 2 Diciembre 2013, 19:33 pm
por Ngeooz
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,161 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
[DUDA][LICENCIA][GPL]tengo una duda sobre las caracteristicas de la licencia GPL
Dudas Generales
Noxware 0 1,838 Último mensaje 2 Mayo 2014, 00:34 am
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines