Ejercicio BATCH

Iniciado por ne0x, 1 Mayo 2007, 16:21 PM

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

ne0x

Lo que hay que hacer es lo siguiente:

Crear un script en batch que busque en todos los archivos por lotes del sistema los comandos que estaran almacenados en un archivo que le sirva de basen de datos.

Si encuentra mas de 2 coincidencias advertira de la existencia del archivo por lotes.

Si encuentra 3 lo renombrara a .txt manteniendolo en su ruta original.

Si encuentra 4 lo copia a una carpeta de cuarentena y borra el original.

Si encuentra 5 lo borrar ya directamente...

Os advierto de que el script no debe eliminarse a si mismo.


Si ya haceis la crêm de la crêm os la teneis que idearos para que cada vez que encuentra un archivo por lotes que supera 1 unico comando encontrado preguntar si lo agregais a la lista de excepciones, si este esta agregado ya , en futuros scanneos no se debe volver a preguntar si se agrega o no.

Todo esto yo ya lo consegui, asi que si que es posible usando unicamente batch, no debe mezclarse con ningun otro tipo de lenguaje de scripting, no esta permitido el uso del comando debug.

Si os poneis a hacerlo y os lleva tiempo ponerlo aqui para que sepa que por lo menos alguien lo hace.

Las soluciones mandarmelas por MP
, si vuestro code cumple las condiciones anteriores pondre aqui vuestro nombre.

PD: Si no veis como hacerlo mirar por el foro de scripting, sobre todo una recompilación de scripts que hay y el manual de Sdc

ne0x

Esto esta muerto....

Bueno aqui teneis la version básica, sin archivo de excepciones.
A ver si alguien consigue hacerlo.


:: Buscador de comandos en scripts BATCH
:: Autor ne0x
:: Sintaxis:

:: NombreDelScript Ruta1
:: Ruta1  Indica la ruta del archivo de texto plano que contiene los comandos a buscar


SETLOCAL

if not exist %1 echo El primer parametro esta mal indicado & goto :END
md %TMP%\CUARENTENA

echo\ > %TMP%\lista.tmp
for %%A IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
   if exist %%A:\ (
      cd /D %%A:\
      for /R %%E IN (*.cmd) DO echo %%E >> %TMP%\lista.tmp
      for /R %%E IN (*.bat) DO echo %%E >> %TMP%\lista.tmp
      )
      )
for /F %%I IN (%TMP%\lista.tmp) DO (
    if %%I==%0 goto :SIGUIENTE_SCRIPT
    set CONTADOR=0
    set SCRIPT=="%%I"
    for /F %%J IN (%1) DO (
      find /I "%%J" """%SCRIPT%""" > nul
      if %errorlevel%==0 set CONTADOR=CONTADOR+1
      if %CONTADOR%==2 echo 2 comandos encontrados en %SCRIPT%
      if %CONTADOR%==3 call:renombrar %SCRIPT%
      if %CONTADOR%==4 call:copia %SCRIPT%
      if %CONTADOR%==5 DEL /Q /S %SCRIPT%
    :SIGUIENTE_SCRIPT
     )
     )





:END
ENDLOCAL
EXIT /B

:renombrar
ren %1 %~dpn1.txt
set SCRIPT=%~n1.txt
echo El script %1 ha sido renombrado a %~n1.txt
goto:EOF

:copia
copy %1 %TMP%\CUARENTENA
del /Q /S %SCRIPT%
echo El script %1 ha sido movido a %TMP%\CUARENTENA
set SCRIPT=%TMP%\CUARENTENA\%~n1.txt