Foros del Web » Soporte técnico » Windows »

Scripts MS-DOS

Estas en el tema de Scripts MS-DOS en el foro de Windows en Foros del Web. Buenas, no se si la duda iría aquí, pero viendo los foros creo que es en este donde mejor encaja Y aquí viene la duda, ...
  #1 (permalink)  
Antiguo 10/05/2006, 10:20
Avatar de Mosiah  
Fecha de Ingreso: mayo-2002
Ubicación: Vitoria - Madrid
Mensajes: 229
Antigüedad: 22 años
Puntos: 0
Scripts MS-DOS

Buenas,

no se si la duda iría aquí, pero viendo los foros creo que es en este donde mejor encaja

Y aquí viene la duda, corta y no se si sencilla jeje

Quiero utilizar la función "find" en un script de MS-DOS. Esta función puede devolver el número de lineas en las que ha encontrado una cadena de texto en un fichero (en un fichero en mi caso :P). Ahora bien, la salida del "find" la envía a pantalla o, hasta donde yo he logrado, a otro fichero, y a mi me gustaría poder mandarla a una variable para poder actuar de una forma u otra dependiendo del número de veces que haya encontrado la palabra.

Alguno sabe si esto se puede hacer??

Saludos y gracias
  #2 (permalink)  
Antiguo 12/05/2006, 13:14
Avatar de jm00092  
Fecha de Ingreso: mayo-2005
Ubicación: Ronda
Mensajes: 106
Antigüedad: 19 años
Puntos: 0
En los ficheros bat no hay variables :(


Para hacer esto, hay que comprobar el valor de una variable especial que se llama errorlevel, justo despues de haber ejecutado la instrucción que sea, pero no se si con find tambien funciona

busca información sobre errorlevel y los valores que devuelve find

if errorlevel 1 goto encontrado
if errorlevel 0 goto noencontrado
  #3 (permalink)  
Antiguo 12/05/2006, 13:30
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Cita:
En los ficheros bat no hay variables :(
Siento decirte que si las hay.

rem --- variables.bat o variables.cmd ----
echo off
:begin
Set i=1
Set /a i=i+1
echo i
Set fecha=%date%
echo %fecha%
goto begin
rem --- fin variables.cmd o variable.bat ---

De todas formas te dejo un ejemplo mio a ver si te vale:
Cita:
http://ficus.pntic.mec.es/~fcag0023/indexscripts.htm
cr.dat : fichero que contiene intro o retorno de carro

---------------Centinela.cmd : cortar aquí----------------------

@echo off
:start
cls
echo ************************************************** *********
echo Centinela o Control de red *
echo Utilidad para la creación de alarmas administrativas *
echo ante la pérdida de conexión con un host de la red local *
echo Javier Castañón 2.003/2.004 *
echo ************************************************** *********

if '%1'=='?' goto Ayuda

Rem Averiguamos el sistema operativo
Rem lo implemento para 2 casos WNT y OS/2
Rem que se daban en la red UCA de Aena
Rem entre 2.003 y 2.004

if '%OS%'=='Windows_NT' set sistemaop=nt
if '%SYSTEM_INI%'=='C:\OS2\OS2SYS.INI' set sistemaop=os2

echo Sistema Operativo = %sistemaop%


Rem setlocal...endlocal , Para os/2 mantiene intocadas las variables de entorno generales
if %sistemaop%=='os2' SETLOCAL

Rem Break=on en entorno OS/2 , asegura poder cortar la ejecución por lotes con ctrl+c
Rem if %sistemaop%=='os2' BREAK=ON
Rem Pero lo habilitamos para todos los casos, ya que Nt lo admite
BREAK=ON

set n=1
@if exist testigo.txt del testigo.txt >nul
goto %n%

:rutina

@if exist testigo.txt del testigo.txt >nul
if %sistemaop%=='nt' goto nt
if %sistemaop%=='os2' goto os2

:nt
set ERRORLEVEL=
ping %iphost% -n 3 > testigo.txt
find /C "recibidos = 0" testigo.txt
Rem también valdria "perdidos =3"

goto alertant%ERRORLEVEL%


Rem Hay alerta errorlevel=0
:alertant0
Rem Mandar alerta a fichero con nombre e ip de el host de la alerta
Rem si no existe el fichero lo crea
if Not exist Alerta_%namehost%.txt type nul > Alerta_%namehost%.txt
echo ************************************************** **>>Alerta_%namehost%.txt
echo Alerta administrativa_El host %namehost% %iphost% No responde >>Alerta_%namehost%.txt

Rem Sellamos la alerta con fecha y hora del suceso
Rem (cr.dat fichero con retorno de carro o intro)

date < cr.dat | find "L">>Alerta_%namehost%.txt
time < cr.dat | find "L">>Alerta_%namehost%.txt

echo ************************************************** **>>Alerta_%namehost%.txt
Rem mandamos un mensage al host puestodecontrol
net send puestodecontrol Alerta en %namehost% %iphost%

rem ********* Otras ideas ************************************************** ****
rem Habria que crear un directorio compartido en un puesto para mandar las alertas
rem por ejemplo \\puestodecontrol\alerta
rem y cada dia controlar con script o manualmente las alertas y borrar si fuese necesario
rem conprobamos que la ud remota k esté correctamente mapeada
rem if Not exist k:\controlmap net use k: /Delete /Yes
rem if Not exist k:\controlmap net use k: \\puestodecontrol\alerta
rem if Not exist K:\controlmap type nul > k:\controlmap
rem lo copiamos en alerta
rem type testigo.txt >> Alerta_%namehost%.txt
rem copy Alerta_%namehost%.txt k:\Alerta_%namehost%.txt /Y

rem ************************************************** ******************************

goto %n%

Rem No hay alerta errorlevel=1
:alertant1

goto %n%


:os2
set ERRORLEVEL =''
ping %iphost% 56 3 > testigo.txt
find /C "0 packets received" testigo.txt
goto alertaos2%ERRORLEVEL%

:alertaos20
rem mandar alerta administrativa a fichero con nombre del host, donde guardará todas las alertas
if Not exist Alerta_%namehost%.txt type nul >Alerta_%namehost%.txt
echo ************************************************** ****************** >>Alerta_%namehost%.txt
echo Alerta Administrativa _ El host %namehost% %iphost% No responde >>Alerta_%namehost%.txt
rem sellamos la alerta con fecha y hora del suceso ( cr.dat fichero con retorno de carro o intro)
date < cr.dat | find "L" >>Alerta_%namehost%.txt
time < cr.dat | find "L" >>Alerta_%namehost%.txt
echo ************************************************** ****************** >>Alerta_%namehost%.txt

:alertaos21
goto %n%


:begin
cls
echo ************************************************** *********
echo Centinela o Control de red *
echo Utilidad para la creación de alarmas administrativas *
echo ante la pérdida de conexión con un host de la red local *
echo Javier Castañón 2.003/2.004 *
echo ************************************************** *********

:1
set iphost=1.1.1.1
set namehost=gw
set n=2
goto rutina

:2
set iphost=192.168.50.100
set namehost=Mostrador100
set n=3
goto rutina

:3
set iphost=2.2.2.2
set namehost=puesto2
set n=4
goto rutina

:4

if %sistemaop%=='os2' ENDLOCAL
goto start

rem ....
rem :n
rem ...

:fin
exit

:Ayuda
echo Aqui iria la descripción de la ayuda
echo ....
REM By JavCasta.
--------------cortar aquí-----------------------

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:40.