Quitar este error en batch

Iniciado por The Last Hero, 26 Marzo 2011, 15:02 PM

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

The Last Hero

Bueno ya hice todo el codigo bien y lo he repasado,sin embargo los procesos y los archivos se unen en una columna. Por ejemplo en archivos no encontrados, aparecen los procesos y los archivos,pero no estan separados por procesos y archivos.

/Arcihvos no encontrados:

arc1.exe
arch2.exe
arch3.exe
arch4.exe
arch5.exe
arch6.exe
arch8.exe
arch9.exe
arch10.exe
arch11.exe
arch12.exe
arch13.exe
arch14.exe
arch15.exe
arch16.exe
arch17.exe
arch18.exe
arch19.exe
C:\Users\Rafa\Desktop\lista.txt
C:\Users\Rafa\AppData\Local\Temp\archivo.exe
C:\Windows\archivo1.exe
C:\Windows\archivo2.dll
C:\Windows\archivo2.exe
C:\Windows\Temp\archivo1.tmp


Te pego el codigo del batch,espero que este todo bien:

setlocal enabledelayedexpansion
Set Token=

for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 delims=;" %%a in ('"echo arc1.exe;arch2.exe;arch3.exe;arch4.exe;arch5.exe;arch6.exe;arch7.exe;arch8.exe;arch9.exe;arch10.exe;arch11.exe;arch12.exe;arch13.exe;arch14.exe;arch15.exe;arch16.exe;arch17.exe;arch18.exe;arch19.exe;arch20.exe;arch21.exe;arch22.exe;arch23.exe;arch24.exe;arch25.exe;"') do (

   Set Token=%%a
   call :Comprobarpro
   Set Token=%%b
   call :Comprobarpro
   Set Token=%%c
   call :Comprobarpro
   Set Token=%%d
   call :Comprobarpro
Set Token=%%e
call :Comprobarpro
Set Token=%%f
call :Comprobarpro
Set Token=%%h
call :Comprobarpro
Set Token=%%i
call :Comprobarpro
Set Token=%%j
call :Comprobarpro
Set Token=%%k
call :Comprobarpro
Set Token=%%l
call :Comprobarpro
Set Token=%%m
call :Comprobarpro
Set Token=%%n
call :Comprobarpro
Set Token=%%o
call :Comprobarpro
Set Token=%%p
call :Comprobarpro
Set Token=%%q
call :Comprobarpro
Set Token=%%r
call :Comprobarpro
Set Token=%%s
call :Comprobarpro

)







setlocal enabledelayedexpansion
Set Token=


for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('"echo %userprofile%\Desktop\lista.txt;%Temp%\archivo.exe;%Windir%\archivo1.exe;%Windir%\archivo2.dll;%Windir%\archivo2.exe;%Windir%\Temp\archivo1.tmp;%Windir%\archivo3.exe;%userprofile%\Desktop\archivo1.exe;"') do (
   Set Token=%%a
   call :Comprobar
   Set Token=%%b
   call :Comprobar
   Set Token=%%c
   call :Comprobar
   Set Token=%%d
   call :Comprobar
Set Token=%%e
   call :Comprobar
Set Token=%%f

   call :Comprobar
Set Token=%%h




)

Goto :END


:Comprobarpro
IF exist %TOKEN% (
 
   Taskkill /F /T /im "!TOKEN!" >NUL 2>&1
   Echo !TOKEN! Se ha eliminado procesos en la memoria
   Echo !TOKEN! >> Archivo.txt
   goto:eof
) ELSE (
      Echo !TOKEN! No se ha encontrado procesos en la memoria
      Echo !TOKEN! >> Archivo2.txt
      goto:eof
)








:Comprobar
IF exist %TOKEN% (
attrib -h !TOKEN!
   Del TOKEN \f \q \i \s >NUL 2>&1
   Echo TOKEN Se ha eliminado.
   Echo !TOKEN! >> Archivo.txt
   goto:eof
) ELSE (
      Echo !TOKEN! No se ha encontrado.
      Echo !TOKEN! >> Archivo2.txt
      goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt
PAUSE >nul


Creo que esta todo bien, pero solo me sale este error.¿este codigo esta completamente listo para eliminar cualquier proceso y luego eliminar el programa, por muy fuerte que sea?

Bueno y es normal que te canses,asique si le das el visto bueno lo damos esto por solucionado y ya me encargo yo,que tu lo has hecho todo -_-"

Muchas gracias por todo y un saludo

SuperDraco

En un rato más tarde me lo repaso, será en un par de horas lo siento, pero mientras te respondo a tu pregunta:

De la manera que se usa DEL y TASKKILL en tu script, lo borra y lo mata segurisimo.
A no ser que.........................

...........Para aumentar la eficacia, te diré 2 cosas:

1.
takeown /F "RUTA_DEL_ARCHIVO" /D S >nul
icacls "RUTA_DEL_ARCHIVO" /grant Administradores:(D,WDAC) /T >nul


Con ese comando obtienes los privilegios del archivo, esto es útil si el Pc en donde va a ser usado tu batch, el usuario no es administrador y no puede manejar archvos de las otras cuentas siendo un usuario limitado...

2.
No se si lo has pensado, tampoco se si sería útil en tu caso, pero recuerda que siempre puedes implementar en tu script un antivirus.

Ej. A-Squared es gratis, se puede usar mediante la línea de comandos (Como casi todos) pero este me gusta bastante por la rapidez y lo poco que pesa con las firmas.




a2cmd.exe [path] | [parameters]

Scan parameters (can be used together):

   /f=[], /files=[path]   Scan files. Full path to file or folder required
   /quick                 Scans all active programs, Spyware Traces and
                          TrackingCookies
   /smart                 Good and fast result, but only important folders will
                          be scanned
   /deep                  Slowest scan. All files on all hard disks will be
                          scanned deeply
   /m, /memory            Scan Memory for active Malware
   /t, /traces            Scan for Spyware Traces
   /c, /cookies           Scan for Tracking Cookies

   /fh=[handle] /pid=[PID]            Scan file by handle. Process ID of the
                                      handle is required
   /b=[pointer] /bs=[size] /pid=[PID] Scan buffer. Buffer size and process ID



En tu caso sería, despues de haber eliminado el archivo con DEL, y haber matado el proceso con TASKKILL, pues una última comprobación en esa carpeta haciendo un:

a2cmd.exe /F="RUTA_DEL_ARCHIVO" /heuristic /archive /delete >NUL >2>&1

Con el >NUL para no mostrar nada en la pantalla... si encuentra algo lo elimina.

Si te ha gustado la idea del antivirus, te diré que con las firmas mas nuevas ocupa unos 80 mb xD. y claro, se puede hacer portable comprimiendolo en un solo ejecutable. Dentro de un rato lo subiré al post ese que he echo de utilidades para el cmd xDDD

Saludosss
No he vuelto, solo estoy de paso.

The Last Hero

Pues es una buena idea lo del antivirus...pero colocarlo en mi batch¿tendria que poner su nombre o estaria incumpliendo algun tipo de derecho?¿como puedo meter diversas funciones que solo me interesen?

Bueno esperare tu respuesta del codigo y si pudieras un ejemplo de como integrar una linea en ese comando,ya que tengo pensado agregar servicios y claves del registro,pero esto lo pensare yo solo a partir de lo que me has dado.

Nuevamente muchas gracias pitoloko y un saludo amigo  ::)

SuperDraco

#33
lo de las diversas funciones no te he entendido.


Y por otro lado, en el caso de "A-Squared"...
Sin animo de lucro parece que si lo puedes usar como te de la gana xD

EDITO: Pasate por mi post para bajarte la última versión si no te apetece instalar el antivirus :P.
http://foro.elhacker.net/scripting/batch_packs_de_aplicaciones_varias_para_usar_en_batch-t322976.0.html





Copyright and license:
----------------------

 The Emsisoft Commandline Scanner is free for private use.
 For commercial use, cheap standalone licenses can be purchased.
 
 Emsisoft Anti-Malware licenses include as well the Emsisoft Commandline
 Scanner. Please note that special licenses for using the Commandline
 Scanner on servers for scanning the data flow of a third party (e.g. for
 access or mailbox clients) are available on inquiry. If you want to use
 the software to scan multiple workstation PCs remotely, it is required to
 buy Helpdesk Scanner licenses:
 http://www.emsisoft.com/en/software/helpdesk/  
 
 Please contact us on: corporatesales@emsisoft.com
No he vuelto, solo estoy de paso.

SuperDraco

#34
¿Estas seguro de que quieres usar el modificador "/S" del comando DEL? es para borrar todos los archivos del subdirectorio... :/

Y te lo repito otra vez.......................................

C:\>del /i
El modificador no es válido: "i".


MIRATE LA AYUDA DE LOS COMANDOS!

DEL /?

Y dentro del FOR hay que usar 2 porcentajes %% porque si pones uno % no lo reconoce, si pones dos %% lo reconoce cono uno %, si pones tres %%% lo reconoce como dos %%,etc..


Los procesos y los archivos se juntaban en la columna porque los estabas guardando en el mismo archivo de texto. Es que te vuelvo a decir lo mismo, los errores de tus scripts son tonterias, que lo modificas sin fijarte lo suficiente...
____________________________________________________________



Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
Set Token=

echo /Procesos en memoria: > ArchivoSI.txt



:Procesos
for /f "tokens=1-25 delims=;" %%a in ('"echo proc1.exe;proc2.exe;proc3.exe;proc4.exe;proc5.exe;proc6.exe;proc7.exe;proc8.exe;proc9.exe;proc10.exe;proc11.exe;proc12.exe;proc13.exe;proc14.exe;proc15.exe;proc16.exe;proc17.exe;proc18.exe;proc19.exe;proc20.exe;proc21.exe;proc22.exe;proc23.exe;proc24.exe;proc25.exe;"') do (
Set Token=%%a
call :ComprobarProc
Set Token=%%b
call :ComprobarProc
Set Token=%%c
call :ComprobarProc
Set Token=%%d
call :ComprobarProc
Set Token=%%e
call :ComprobarProc
Set Token=%%f
call :ComprobarProc
Set Token=%%h
call :ComprobarProc
Set Token=%%i
call :ComprobarProc
Set Token=%%j
call :ComprobarProc
Set Token=%%k
call :ComprobarProc
Set Token=%%l
call :ComprobarProc
Set Token=%%m
call :ComprobarProc
Set Token=%%n
call :ComprobarProc
Set Token=%%o
call :ComprobarProc
Set Token=%%p
call :ComprobarProc
Set Token=%%q
call :ComprobarProc
Set Token=%%r
call :ComprobarProc
Set Token=%%s
call :ComprobarProc
Set Token=%%t
call :ComprobarProc
Set Token=%%u
call :ComprobarProc
Set Token=%%v
call :ComprobarProc
Set Token=%%w
call :ComprobarProc
Set Token=%%x
call :ComprobarProc
Set Token=%%y
call :ComprobarProc
Set Token=%%z
call :ComprobarProc
)





:Archivos
for /f "tokens=1-6 delims=;" %%a in ('"echo %%userprofile%%\Desktop\lista.txt;%%Temp%%\archivo.exe;%%Windir%%\archivo1.exe;%%Windir%%\archivo2.dll;%%Windir%%\archivo2.exe;%%Windir%%\Temp\archivo1.tmp;%%Windir%%\archivo3.exe;%%userprofile%%\Desktop\archivo1.exe;"') do (
  Set Token=%%a
  call :Comprobar
  Set Token=%%b
  call :Comprobar
  Set Token=%%c
  call :Comprobar
  Set Token=%%d
  call :Comprobar
Set Token=%%e
  call :Comprobar
Set Token=%%f
  call :Comprobar
)
Goto :END








:ComprobarProc
IF exist %TOKEN% (
Taskkill /F /T /IM "!TOKEN!" >NUL 2>&1
Echo !TOKEN! Se ha eliminado procesos en la memoria.
Echo !TOKEN! >> ProcesosSI.txt
goto:eof
) ELSE (
       Echo !TOKEN! No se ha encontrado procesos en la memoria.
       Echo !TOKEN! >> ProcesosNO.txt
       goto:eof
)




:Comprobar
IF exist %TOKEN% (
attrib -h !TOKEN!
Del  !TOKEN! \f \q /A ARSHIAL >NUL 2>&1
Echo !TOKEN! Se ha eliminado.
Echo !TOKEN! >> ArchivoSI.txt
  goto:eof
) ELSE (
    Echo !TOKEN! No se ha encontrado.
Echo !TOKEN! >> ArchivoNO.txt
goto:eof
)

Aqui falta la parte donde hay que copiar los textos bien, no me apetece modificarla porque no tengo ningún proceso corriendo de prueba ni archivos ahora

le faltan cosas, pero no creo que sea tan dificil '¬¬ o puedes usar la utilidad "combine.exe" de un pack del post mio que te he dicho, es más comodo...

en fin Solo hay que arreglarlo un poco:


Código (dos) [Seleccionar]

:END
cls
echo+ >> ArchivoSI.txt
Echo /Archivos no encontrados: >> ArchivoSI.txt
echo+ >> ArchivoSI.txt
copy procesossi+procesosno

copy los archivos qsi+los q no >NUL 2>&1

Copy los archivos+los procesos
Notepad
PAUSE >nul





El comando del antivirus obviamente iria despues del DEL y el TASKKILL, haces un :Call antivirus debajo de :Call comprobar pero la verdad creo que no hace falta, si con el IF EXIST te dice que no existe...pues no existe, pa que XD

De todas formas sería:

Antivirus.exe "COMANDO_DEL_ANTIVIRUS_EN_!TOKEN!" >nul 2>&1
goto:eof


No he vuelto, solo estoy de paso.

The Last Hero

Perdona pitoloko por contestar tan tarde, pero tenia un examen xD Bueno muchas gracias por haberme ayudado solo me queda una ultima duda(esta vez si,es una sola xD)¿puedo agregar claves del registro para eliminar y servicios tambien para eliminar de la misma forma que lo hemos hecho con los archivos y los procesos?

Y gracias tambien por la paciencia y el codigo, he aprendido mucho gracias a ti.

Un saludo amigo  ::)

SuperDraco

Hombre, si de la misma forma te refieres a dentro de un FOR, pues si, aunque me parece un poco lío hacerlo de esa manera, sería mejor un

:call regdel

:regdel
REG DELETE "RUTA" >nul
goto:eof


no se, es como lo haría yo,pero lo puedes hacer donde te de la gana, solo hay que hacerlo bien xD

y para los servicios lo haces con el comando SC delete
(Si el servicio se está ejecutando, primero debes pararlo con SC STOP, y tal vez debas deshabilitarlo tambien)


saludosss
No he vuelto, solo estoy de paso.

The Last Hero

Si eso pensaba,primero detenerlo y luego borrarlo,asi borraria mejor los rootkits,que vienen como servicios y ademas el archivo  :xD Bueno por mi tema solucionado y muchas muchas gracias amigo,espero que todo te vaya bien  ;)

Un saludo  ;D