Hola Hakers,
Soy nuevo en estos temas y pues quiero aprender, estoy en mi primer batch, pero tengo el siguiente problema:
Tengo 3 archivos los cuales contienen la siguiente información:
rem ********************************************************
rem ARCHIVO reporte.txt
rem ********************************************************
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
rem ********************************************************
rem ARCHIVO reporte2.txt
rem ********************************************************
Tiempo de espera agotado para esta solicitud.
Respuesta desde 10.0.51.171: bytes=32 tiempo<1m TTL=128
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
rem ********************************************************
rem ARCHIVO reporte3.txt
rem ********************************************************
Tiempo de espera agotado para esta solicitud.
Respuesta desde 10.0.51.171: bytes=32 tiempo<1m TTL=128
Respuesta desde 10.0.51.171: bytes=32 tiempo<1m TTL=128
Respuesta desde 10.0.51.171: bytes=32 tiempo<1m TTL=128
En el código marque el batch por pasos y en el paso 1 todo va bien con el "for /f..." pues si me da el valor esperado, posteriormente entro a un "if" donde tengo otro "for /f..." y ahí en ese paso al poner un "echo %resul2" me marca ECHO esta desactivado entro a un segundo "if" y me marca lo mismo con la variable %resul3%, no obtengo valor en mis variables resul2 y resul3
Mi código es el siguiente:
@echo off
rem ********************************************************
echo PASO 1
rem ********************************************************
for /f "tokens=3" %%a in ('find /c /i "agotado" reporte.txt') Do set resul1=%%a
find /c /i "agotado" reporte.txt
type reporte.txt
echo EL RESULTADO ES %resul1%
rem ********************************************************
echo PASO 2
rem ********************************************************
if %resul1% GTR 2 (
for /f "tokens=3" %%a in ('find /c /i "agotado" reporte2.txt') Do set resul2=%%a
find /c /i "agotado" reporte2.txt
type reporte2.txt
echo.
echo %resul2%
echo EL RESULTADO ES %resul2%
)
rem ********************************************************
echo PASO 3
rem ********************************************************
if %resul2% GTR 2 (
for /f "tokens=3" %%a in ('find /c /i "agotado" reporte3.txt') Do set resul3=%%a
find /c /i "agotado" reporte3.txt
type reporte3.txt
echo.
echo EL RESULTADO ES %resul3%
) else (
echo EL EQUIPO RESPONDE
)
echo.
pause
exit
GRACIAS POR LA AYUDA.
MOD: Usa el botón de insertar código
He estado probando el código y parece que hasta que no terminan todas las operaciones que hay dentro del "if", no se definen las variables que defines en los bucles for ("resul2" y "resul3").
Si sacas las operaciones que siguen al "for" fuera del if para el caso en el que las variables "resul2" y "resul3" estén definidas si que funciona. Con este código me funciona.
@echo off
rem ********************************************************
echo PASO 1
rem ********************************************************
for /f "tokens=3" %%a in ('find /c /i "agotado" reporte.txt') do (set resul1=%%a)
find /c /i "agotado" reporte.txt
type reporte.txt
echo EL RESULTADO ES %resul1%
rem ********************************************************
echo PASO 2
rem ********************************************************
if %resul1% GTR 2 (
for /f "tokens=3" %%a in ('find /c /i "agotado" reporte2.txt') do (set resul2=%%a)
)
if "%resul2%" NEQ "" (
find /c /i "agotado" reporte2.txt
echo %resul2%
type reporte2.txt
echo EL RESULTADO ES %resul2%
)
rem ********************************************************
echo PASO 3
rem ********************************************************
if %resul2% GTR 2 (
for /f "tokens=3" %%a in ('find /c /i "agotado" reporte3.txt') Do set resul3=%%a
) else (
echo EL EQUIPO RESPONDE
)
if "%resul3%" NEQ "" (
find /c /i "agotado" reporte3.txt
type reporte3.txt
echo.
echo EL RESULTADO ES %resul3%
)
echo.
pause
exit
Un saludo
Bienvenido a Batch,
El problema es que no estás expandiendo las variables dentro de los búcles.
Añade un:
Setlocal EnableDelayedExpansion
Y usa las variables con exclamaciones:
Echo !resul2!
O no añadas nada y usa Call:
Call %%resul2%%
http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.15.html
Cita de: Elektro H@cker
Las variables expandidas son prácticamente igual que las variables standard, pero para poder usarlas se debe habilitar la expansión de las mismas con el comando SETLOCAL:
Setlocal enabledelayedexpansion
Ejemplo:
@Echo OFF
Setlocal enabledelayedexpansion
Set "VARIABLE=VALOR"
Echo !VARIABLE!
Pause >NUL
(http://img22.imageshack.us/img22/259/captura1y.png)
Esta técnica se usa comúnmente dentro de un FOR donde para poder mostrar variables tienen que estar expandidas.
Pero estas variables tienes sus inconvenientes, ya que al habilitar la expansión, solamente podremos usar el caracter ! como operador de variable, es decir, no podremos mostrar el caracter (Ni siquiera excluyendolo ni usando comillas).
Ejemplo:
@Echo OFF
Setlocal enabledelayedexpansion
Echo !Hola
Echo ^!Hola
Echo "!Hola"
Pause >NUL
(http://img22.imageshack.us/img22/4156/captura3oi.png)
NOTA: Siempre se puede evitar la expansión y su restricción de caracteres, eso lo explicaré cuando lleguemos a la temática FOR.
http://ss64.com/nt/delayedexpansion.html
PD: Usa el botón "Insertar código" cuando postees
Muchas gracias a todos los que colaboraron con su ayuda. :D