problema al asignar variables dentro un bucle

Iniciado por wcordero, 14 Agosto 2013, 23:46 PM

0 Miembros y 1 Visitante están viendo este tema.

wcordero

amigos, hace mucho tiempo que vengo leyendo sus ayudas, y me han servido de mucho, ahora me toco a mi el problema, tengo el siguiente código:

Código (dos) [Seleccionar]
reg query "HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL"|find /V "!" |find /V "HKEY_LOCAL_MACHINE" |find /V "MSSQLSERVER" |gawk '{print $1}'  > %TMP%\inst.log

type %TMP%\inst.log |find /v /c "" > %TMP%\CNT
set /P CNT=<%TMP%\CNT

if %CNT% EQU 2 (
osql -E -Q"select @@version" -o%TMP%\Est_Inst.inst

type %TMP%\Est_INst.inst |find /v /c "" > %TMP%\CNT
set /P CNT=<%TMP%\CNT
echo %CNT%

if %CNT% EQU 21 (echo NOOK %date%_%time% >> %TMP%\EST_INST.lg) ELSE (echo OK %date%_%time% >> %TMP%\EST_INST.lg)

) ELSE (for /f %i in (%TMP%\inst.log) do (
osql -E -S%SRV%\%i -Q"select @@version" -o%TMP%\Est_Inst.inst

type %TMP%\Est_INst.inst |find /v /c "" > %TMP%\CNT
set /P CNT=<%TMP%\CNT
echo %CNT%

if %CNT% NEQ 21 (echo NOOK %i >> %TMP%\EST_INST.lg) ELSE (echo OK >> %TMP%\EST_INST.lg)
)
)



el problema se me genera al momento de asignar los valores dentro del bucle, a pesar de que cuenta las líneas, no es capaz de pasarle el valor a la variable, por favor una mano, ya no se me ocurre nada =/

Eleкtro

#1
Hola

Bienvenido al foro, pero haz el favor de leer mi firma para que el incumplimiento de la norma no se vuelve a repetir.

Sin probar el código, salta a simple vista un error: "for /f %i in", debes duplicar el número de porcentajes "%" en un script.

Por otro lado, dudo mucho que este comando de Linux te funcione bajo Windows: gawk '{print $1}', pues aunque estés usando un puerto del comando en Batch los argumentos se encierran usando comillas dobles, no comillas, y el parámetro "$1" no es nada en Batch, ah no ser que séa un parámetro especial del comando gawk... en fin, si a ti te funciona así, no hagas caso a este comentario.

PD: Como nota personal, debes usar la comillas dobles aquí para evitar futuros errores..."%TMP%\CNT", además podrías intentar ser un poco ordenado al escribir un código o simplemente utilizar la indentación, esto para que el código sea mínimamente legible para los que leamos tu duda.

Saludos!








wcordero

gracias por responder, leere atentamente lo que me indicas, para no volver a cometer el error.

ahora respecto al código. hasta el momento no esta siendo "lanzado" desde un bat, sino que directamente sobre la cmd, es por eso que no tiene el doble %.

ahora respecto a los comando de Linux, revisa una aplicación llamada cygwin ya que en Windows no existe una forma fácil de poder hacerlo, y extraer un dato especifico, ya lo he ocupado antes y funciona.

respecto al orden, no veo la falta de orden, si puedieses darme un ejemplo de como ordenar de mejor manera el script antes entregado te lo agradecería para tenerlo y adoptarlo.

gracias!! =), pero aun no me queda claro como poder asignar el valor a la variable, probare lo que me indicas de las "" y les comento, gracias!! :D

Eleкtro

#3
Respecto al problema del code, parece que el valor se setea corréctamente en la variable, pero estás dentro de un IF, así que para solucionar lo del valor en la variable CNT (mostrar el contenido de la variablo y/o usar la variable) símplemente tienes que activar y usar la expansión de variables (SETLOCAL ENABLEDELAYEDEXPANSION), o en su defecto usar el comando CALL de esta manera:

Código (dos) [Seleccionar]
Call Echo %%CNT%%






Cita de: wcordero en 19 Agosto 2013, 00:01 AMhasta el momento no esta siendo "lanzado" desde un bat, sino que directamente sobre la cmd, es por eso que no tiene el doble %.

Entonces no has sido lo suficientemente específico, deberías haber dicho que ejecutas las órdenes diréctamente en la CMD, y que además usas Cygwin.

Cita de: wcordero en 19 Agosto 2013, 00:01 AMahora respecto a los comando de Linux, revisa una aplicación llamada cygwin

No necesitas usar cygwin, dispones de casi todos (sino todos) los comandos de Linux para Windows -> Gawk for Windows , sólo te lo digo como información por si quieres evitar depender de cygwin.

No sé que hace el susodicho comando "gawk", pero quizás esto te sirva como alternativa:  [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto

Cita de: wcordero en 19 Agosto 2013, 00:01 AMrespecto al orden, no veo la falta de orden, si puedieses darme un ejemplo de como ordenar de mejor manera el script antes entregado te lo agradecería para tenerlo y adoptarlo.

Ejemplos de indentación -> http://en.wikipedia.org/wiki/Wikipedia:Indentation

Saludos.