Hola amigos estoy tratando de hacer un bat en el cual cambio los atributos de los archivos borro accesos directos pero primero selecciono la unidad en la que lo voy a ejecutar. pero no funciona solo se ejecuta en el directorio donde esta el bat. aqui esta el codigo que estoy usando :-\
@echo off
color cf
for %%_ in (D, E, F, G, H, I, J, K, L, M, N, O, P, Q, S, T, U, V, W, X, Y, Z) do (
dir /b %%_:\ > nul 2>&1 && (
@echo =========================UNIDAD "%%_:" DETECTADA=========================
)
)
@echo =======================================================================
:menu
@echo =====================PRESIONE LA LETRA DE LA UNIDAD====================
set /p opcion=
if %opcion%==d D:
@echo =======================================================================
@echo =======================================================================
@echo =====================REPARANDO ARCHIVOS INFECTADOS=====================
Attrib /d /s -r -h -s *.*
@echo =======================================================================
@echo =======================================================================
@echo ======================ELIMINANDO ACCESOS DIRECTOS======================
if exist *.lnk del *.lnk
@echo =======================================================================
@echo =======================================================================
@echo ==========================ELIMINANDO AUTORUN===========================
if exist autorun.inf del autorun.inf
@echo =======================================================================
@echo =======================================================================
@echo ========================OPERACION FINALIZADA===========================
@echo =======================================================================
@echo =======================================================================
msg * =====ARCHIVOS REPARADOS D@NY3J=====
cls
goto menu)
if %opcion%==e E:
@echo =======================================================================
@echo =======================================================================
@echo =====================REPARANDO ARCHIVOS INFECTADOS=====================
Attrib /d /s -r -h -s *.*
@echo =======================================================================
@echo =======================================================================
@echo ======================ELIMINANDO ACCESOS DIRECTOS======================
if exist *.lnk del *.lnk
@echo =======================================================================
@echo =======================================================================
@echo ==========================ELIMINANDO AUTORUN===========================
if exist autorun.inf del autorun.inf
@echo =======================================================================
@echo =======================================================================
@echo ========================OPERACION FINALIZADA===========================
@echo =======================================================================
@echo =======================================================================
msg * =====ARCHIVOS REPARADOS D@NY3J=====
cls
goto menu)
if %opcion%==f F:
@echo =======================================================================
@echo =======================================================================
@echo =====================REPARANDO ARCHIVOS INFECTADOS=====================
Attrib /d /s -r -h -s *.*
@echo =======================================================================
@echo =======================================================================
@echo ======================ELIMINANDO ACCESOS DIRECTOS======================
if exist *.lnk del *.lnk
@echo =======================================================================
@echo =======================================================================
@echo ==========================ELIMINANDO AUTORUN===========================
if exist autorun.inf del autorun.inf
@echo =======================================================================
@echo =======================================================================
@echo ========================OPERACION FINALIZADA===========================
@echo =======================================================================
@echo =======================================================================
msg * =====ARCHIVOS REPARADOS D@NY3J=====
cls
goto menu)
if %opcion%==g G:
@echo =======================================================================
@echo =======================================================================
@echo =====================REPARANDO ARCHIVOS INFECTADOS=====================
Attrib /d /s -r -h -s *.*
@echo =======================================================================
@echo =======================================================================
@echo ======================ELIMINANDO ACCESOS DIRECTOS======================
if exist *.lnk del *.lnk
@echo =======================================================================
@echo =======================================================================
@echo ==========================ELIMINANDO AUTORUN===========================
if exist autorun.inf del autorun.inf
@echo =======================================================================
@echo =======================================================================
@echo ========================OPERACION FINALIZADA===========================
@echo =======================================================================
@echo =======================================================================
msg * =====ARCHIVOS REPARADOS D@NY3J=====
cls
goto menu)
if %opcion%==h H:
@echo =======================================================================
@echo =======================================================================
@echo =====================REPARANDO ARCHIVOS INFECTADOS=====================
Attrib /d /s -r -h -s *.*
@echo =======================================================================
@echo =======================================================================
@echo ======================ELIMINANDO ACCESOS DIRECTOS======================
if exist *.lnk del *.lnk
@echo =======================================================================
@echo =======================================================================
@echo ==========================ELIMINANDO AUTORUN===========================
if exist autorun.inf del autorun.inf
@echo =======================================================================
@echo =======================================================================
@echo ========================OPERACION FINALIZADA===========================
@echo =======================================================================
@echo =======================================================================
msg * =====ARCHIVOS REPARADOS D@NY3J=====
cls
goto menu)
he intentado de todo y no he podigo gracias de antemano el que me de una manito... ;-)
1º Tengo una duda, ¿Con que intención haces un dir de la unidad? :/ Si intentas comprobar si la unidad existe, no es correcto, deberías usar if exist, o el comando del Dir + If %errorlevel%...
2º - Recuerda el uso de las comillas dobles en las acciones de "desinfectar" (en tu batch original como en el mio), de lo contrario no funcionaran las acciones sobre archivos con espacios en el nombre, y con los accesos directos lo mismo.
3º - en los If exist debes marcar la Ruta/letra de la unidad, por eso el bat solamente busca en el direcorio donde tenías tu batch.
4º Tu menú no funciona porque:
if %opcion%==d D:
No puedes marcar dos posibles respuestas (d y D:) en el mismo IF.
Asi que en tu batch original hace falta 4 posibles respuestas, entonces quedaría así:
if %opcion%==d ...
if %opcion%==D ...
if %opcion%==d: ...
if %opcion%==D: ...
Se que es un engorro, Pero con ingenio todo se puede simplificar, yo solo uso un IF que reune las 4 posibles respuestas qu he mencionado, y todas las demás que necesita tu batch original. Miratelo y aprende poco a poco, hay comandos muy utiles como el fsutil!
5º - Te he ordenado, simplificado, y mejorado el code. (Para que funcione correctamente, solo hace falta escribir la letra de la unidad (A,B,C,D,etc..) sin puntos Ya lo he corregido en el batch, puedes escribir "C" o "C:" ;D.
Saludos
@echo off
Title=foro.elhacker.net
color cf
setlocal Enabledelayedexpansion
REM Listamos todas las unidades.
for /F "tokens=1-9* delims=:\ " %%a in ('fsutil fsinfo drives') do (
Set unidad=%%b & Call :verificar
Set unidad=%%c & Call :verificar
Set unidad=%%d & Call :verificar
Set unidad=%%e & Call :verificar
Set unidad=%%f & Call :verificar
Set unidad=%%g & Call :verificar
Set unidad=%%h & Call :verificar
Set unidad=%%i & Call :verificar
Set unidad=%%j & Call :verificar
)
goto :menu
REM Filtramos las unidades Fijas y Extraibles y nos deshacemos de las unidades opticas.
:Verificar
fsutil fsinfo drivetype !unidad:~-0,1!: | findstr /s "fija extra"
If %errorlevel% EQU 0 (
set /a num+=1
Set Unidad!num!=!unidad:~-0,1!:
goto:eof
) ELSE (
goto:eof
)
REM El menu para elegir la unidad a desinfectar.
:Menu
cls
echo+
echo ========================!num! UNIDADES ENCONTRADAS=========================
echo =======================================================================
echo ======================UNIDADES !unidad1!!Unidad2!!Unidad3!!Unidad4!!Unidad5!!Unidad6!!Unidad7!!Unidad8!!Unidad9!DETECTADAS=======================
echo =======================================================================
echo =====================PRESIONE LA LETRA DE LA UNIDAD====================
set /p opcion=
if exist %opcion::=%: (
goto :desinfectar
) ELSE (
echo+ & echo No se encuentra la unidad %opcion::=%:...
ping -n 2 LOCALHOST >nul
cls
goto :menu
)
REM Desinfectamos en la unidad seleccionada.
:Desinfectar
Setlocal Disabledelayedexpansion
echo =======================================================================
echo =======================================================================
echo =====================REPARANDO ARCHIVOS INFECTADOS=====================
Attrib /d /s -r -h -s "%opcion::=%:\*"
echo =======================================================================
echo =======================================================================
echo ======================ELIMINANDO ACCESOS DIRECTOS======================
if exist "%opcion::=%:\*.lnk" del /f /q "%opcion::=%:\*.lnk"
echo =======================================================================
echo =======================================================================
echo ==========================ELIMINANDO AUTORUN===========================
if exist %opcion::=%:\autorun.inf del /F %opcion::=%:\autorun.inf
echo =======================================================================
echo =======================================================================
echo ========================OPERACI¢N FINALIZADA===========================
echo =======================================================================
echo =======================================================================
msg * =====ARCHIVOS REPARADOS D@NY3J=====
REM By PiToLoKo
REM foro.elhacker.net
setlocal Enabledelayedexpansion
goto :menu
PD: Lo he probado y me funciona bien, ya nos cuentas como te ha ido :)
(http://img807.imageshack.us/img807/2200/cwindowssystem32cmdexe.jpg)
GRacias pitoloko ;-) si voy a repasar un poco lo que pasa que no domino mucho programacion bath.
Cita de: dany3j en 29 Junio 2011, 17:44 PM
GRacias pitoloko ;-) si voy a repasar un poco lo que pasa que no domino mucho programacion bath.
Batch.
lo e ejecutado en windows 7 y funciona pero me sale un error
Citarno hay disco en la unidad inserte un disco en la unidad \device\harddisk1\DR1 y tambien DR6
y en windows xp no me reconoce el pendrive teniendo como letra H: mi unidad solo el disco c: porque sera...? Y gracias por la correccion
Leo ;-)
Seguro que tienes los dispositivos bien conectados y tal?
Acabo de probarlo en un pen, unidad "F", me ha funcionado bien.
saludosss
EDITO: ¿estás usando mi code, o el tuyo? Si has copiado el mio tal cual, debería ir >:(
Pon esto en la consola:
fsutil fsinfo drives
Debería salirte algo así:
Unidades: A:\ C:\ D:\ F:\
El error que dices, parece ser del FSUTIL, por eso, comprueba que te sale lo mismo que a mi xD
EDITO2: Tambien se me ocurre que puede ser un error al leer unidades ópticas... (CD, DVD, BR), así que he modificado el script de arriba, el menú ahora solamente muestra las unidades fijas y extraibles (Discos duros y Pendrives/SD's/etc...), bueno o eso creo, porque ahora no puedo probarlo con mi lector de DVD, que está desconectado xDDDDDDDD, de todas formas
Pruebalo, ¿ok?
Saludos
Si es eso mismo... que pense yo aun tiene un error. me esta detectndo la unidad E: y solo tengo el disco C: y D: me imagino que es porque la pc tiene un lector de memorias sd y no tiene la memoria puesta cuando selecciono la letra E: k me imagino que es la de la memoria me sale el mismo error :o
(http://img807.imageshack.us/img807/2200/cwindowssystem32cmdexe.jpg)
Ufff... no podías poner otro color más cañero? :xD --> Sí, sé que puedes
Gracias por el code, no sabía lo de fsutil ...
Saludos!
Es el color que tenía su batch xD, si por mi fuera... ;)
(http://img840.imageshack.us/img840/2779/administradorforoelhack.jpg)
:silbar:
Cita de: pitoloko en 1 Julio 2011, 13:54 PM
Es el color que tenía su batch xD, si por mi fuera... ;)
(http://img840.imageshack.us/img840/2779/administradorforoelhack.jpg)
:silbar:
Te quedo rebien porfa si puede publicar el codigo... :laugh: me gusto mucho.
ya borré el script, lo hice en 5 segundos xD con la ayuda de Colous v5
http://foro.elhacker.net/scripting/batch_packs_de_aplicaciones_varias_commandlineinterface_actualizado_05mayo-t322976.0.html
(Me parece que el hosting da problemas, si no puedes bajarte el link, bajate el colous de aqui:
http://foro.SPAM(1)/f82/g-colous-v5-193165/
Ups... spam, bueno, de la web de los copiones de elhacker.net... )
Uso:
Colous writesec "[COLOR] texto..."
ejemplo:
Colous writesec "[7]Los limones son [14]amarillos[7]!, Los tomates son [12]rojos."
PD: Tambien puedes usar coordenadas, si buscas Colous en el buscador del foro te saldrá un manual (Copiado)
ok perfecto... ;-)
Hola compañeros, yo estaba trabajando en el mismo, ya tengo avanzado todo el proceso de eliminación, pero he querido ir mas alla, como tengo un centro de computo en donde siempre el problema es que los chavos no vacunan sus memorias, pues se me habia ocurrido hacerlo residente en memoria para que automaticamente al detectar una USB elimine los *.lnk y el autorun y les muestre sus carpetas.
Alguna idea compañeros?
Gracias.
Edito:
Se que debo de usar:reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "el nombre que kieras" /t
REG_SZ (alphanumerico) /d "rutadelbat"
pero mi pregunta va enfoncada a como hacer que se ejecute cuando se conecte la USB??? alguien sabe de alguna instrucción???
Edito:
He encontrado un hilo anterior que habla de lo que he querido hacer, lo pondre en practica y les posteare el resultado.
http://foro.elhacker.net/software/como_ejecutar_un_programa_al_insertar_una_memoria_usb-t266761.0.html
Cita de: erickvcr en 14 Julio 2011, 14:52 PM
Hola compañeros, yo estaba trabajando en el mismo, ya tengo avanzado todo el proceso de eliminación, pero he querido ir mas alla, como tengo un centro de computo en donde siempre el problema es que los chavos no vacunan sus memorias, pues se me habia ocurrido hacerlo residente en memoria para que automaticamente al detectar una USB elimine los *.lnk y el autorun y les muestre sus carpetas.
Alguna idea compañeros?
Gracias.
El mismo code que posteé te sirve, solo tienes que borrar la mitad del code, y cambiar esta línea.
fsutil fsinfo drivetype !unidad:~-0,1!: | findstr /s "extra"
Con eso detecta si la unidad es extraibles (Pendrive).
Luego ya agregas los comandos para borrar el autorun.inf con un:
del /Q /F /A H
saludosss
Cita de: erickvcr en 14 Julio 2011, 14:52 PM
Edito:
Se que debo de usar:reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "el nombre que kieras" /t
REG_SZ (alphanumerico) /d "rutadelbat"
pero mi pregunta va enfoncada a como hacer que se ejecute cuando se conecte la USB??? alguien sabe de alguna instrucción???
no, lo que necesitas para que el .bat se quede en la memoría es hacer un bucle.
uhmmm interesante lo del bucle ;-)
puedes ilustrarme un poco mas? :D
¿llevas algo de code echo?
EDITO: bueno, te pongo un ejemplo de un bucle sencillo.
@echo off
:Bucle
REM aqui la mayor parte del code del primer post para buscar unidades conectadas con los cambios que te dije...
If %errorlevel% GTR 0 (
ping -n 5 localhost >nul
goto :bucle
) ELSE (
comando para borrar autorun, etc
)
algo así, más o menos.
Haz tu un poco y luego te lo completo, ahora estoy en otras cosas :xD
Muy bien ya habia terminado algo del codigo, y retomando lo que ya habias manejado para no salirnos de la misma linea y variables, esto es lo que "yo creo" funcionaria.
@echo off
:inicio
for /F "tokens=1-9* delims=:\ " %%a in ('fsutil fsinfo drives') do (
Set unidad=%%d & Call :verificar
Set unidad=%%e & Call :verificar
Set unidad=%%f & Call :verificar
Set unidad=%%g & Call :verificar
Set unidad=%%h & Call :verificar
Set unidad=%%i & Call :verificar
Set unidad=%%j & Call :verificar
Set unidad=%%k & Call :verificar
Set unidad=%%l & Call :verificar
)
:Verificar
fsutil fsinfo drivetype !unidad:~-0,1!: | findstr /s "extra"
If %errorlevel% EQU 0 (
Set Unidad!num!=!unidad:~-0,1!:
%!num!%:
Attrib /d /s -r -h -s
del *.lnk /q /f
del autorun.* /q /f
goto:eof
) ELSE (
goto:eof
)
goto:inicio
@echo off
setlocal enabledelayedexpansion
:inicio
for /F "tokens=1-9* delims=:\ " %%a in ('fsutil fsinfo drives') do (
Set unidad=%%b & Call :verificar
Set unidad=%%c & Call :verificar
Set unidad=%%d & Call :verificar
Set unidad=%%e & Call :verificar
Set unidad=%%f & Call :verificar
Set unidad=%%g & Call :verificar
Set unidad=%%h & Call :verificar
Set unidad=%%i & Call :verificar
Set unidad=%%j & Call :verificar
)
Ping -n 5 localhost >nul
Goto :Inicio
:Verificar
fsutil fsinfo drivetype !unidad:~-0,1!: | findstr /s "extra"
If %errorlevel% EQU 0 (
Attrib /d /s -r -h -s "!unidad:~-0,1!:\*"
del /Q /F "!unidad:~-0,1!:\*.lnk"
del /Q /F "!unidad:~-0,1!:\autorun.*"
goto:eof
) ELSE (
goto:eof
)
así debería funcionar
saludosss
EDITO: modificado
Muchisimas gracias compañero lo pondre en marcha en las compus :D ... Thxs
Cita de: erickvcr en 14 Julio 2011, 18:05 PM
Muchisimas gracias compañero lo pondre en marcha en las compus :D ... Thxs
de nada pero lo he modificado, no me di cuenta de que le cambiaste las variables al for xD
Jejejeje si es que no tiene mucho caso el dejar la B y la C, mejor nos vamos directamente a lo util jejejeje, una duda, el hecho de que la llamada a Inicio no este dentro de Verificar, aun asi hara el bucle?
Cita de: erickvcr en 14 Julio 2011, 18:10 PM
Jejejeje si es que no tiene mucho caso el dejar la B y la C, mejor nos vamos directamente a lo util jejejeje
Como quieras, yo lo dejaría como está, si empiezas por la variable %%D esarás omitiendo las 2 primeras unidades, y entonces tienes que aumentar los tokens a 11. (
1-11)
si las compus tienen disqueteras, la variable
%%B corresponderá a la unidad
A: por que es la primera alfabéticamente, y las demás variables según la letra de unidad que tengan asignadas el resto de dispositivos...
en mi PC es:
%%B = C:
%%C = D:
%%D = J:No se si me he explicado bien... xD, al empezar por la variable %%D, tepuedes haber saltado unidades que sean pendrives.
Cita de: erickvcr en 14 Julio 2011, 18:10 PM
una duda, el hecho de que la llamada a Inicio no este dentro de Verificar, aun asi hara el bucle?
Si, puedes estar seguro. :P
Si pones "
goto:inicio" dentro de
verificar, consigues otro tipo de bucle, lo que vas a conseguir es que solo se compruebe la primera unidad seteada (
%%b), una y otra vez, y el resto de unidades no se comprobarán.
uhmmmmm no lo habia pensado ... muchas gracias compañero, seguire tus sugerencias, me habia confundido ya que a veces en mi compu pongo hasta 4 usbs y llego por ahi de la letra L o pensando que en otra compu tengo unidades virtuales, pero mejor lo dejo como tu me dices :D
Por que el que sabe ... sabe ... y el que no ... le pregunta al hacker xD jajajaj hasta rimo
es que me parece que te has confundido :xD
%%B no significa unidad B:
%%B significa la primera unidad por orden alfabético de la PC.
Así que con el code original, comprueba las primera nueve unidades de tu pc, pero bueno, si no lo ves suficiente, solo añade lineas al for siguiendo el orden alfabético de la variable, y aumentando los tokens por cada variable q hagas, y ya.
9 variables = tokens=1-9*
15 variables = toneks=1-15*
ahora si, saludossss
houston ... we've a problem xD
Y en el caso del win 7 en el que se necesitan privilegios de administrador para el uso de "fsutil fsinfo drivetype", como podriamos solucionar eso para no estar dandole "SI" a esa ventanita latosa?
Cita de: erickvcr en 14 Julio 2011, 19:09 PM
se necesitan privilegios de administrador para el uso de "fsutil fsinfo drivetype", como podriamos solucionar eso
prueba así, añade estas líneas entre la de
setlocal e :
iniciotakeown /F "%Windir%\System32\fsutil.exe" >nul 2>&1
icacls "%Windir%\System32\fsutil.exe" /grant Administradores:(D,WDAC,MA,F) >nul 2>&1
Utilizas una vez el script con esas nuevas líneas, luego cierra sesión por si acaso, vuelves a abrir, y vuelves a utilizar el code, entonces debería funcionar :xD.
lo checare y luego te informo que paso ... MIL GRACIAS!
Necesito su ayuda, buscando por la net, encontré este trabajo que justo es lo que necesitaba. Lo compile con el Quick Batch File Compiler y solo me detecta la unidad C... pero si funciona bastante bien la ejecución del attrib y la eliminación del autorun, me gustaría que funcionara lo de las unidades ya que el programa seria para profesores con poco dominio de computación.
Atento a sus aporte y en especial a PITOLOKO
gracias
pitoloko, solo tendrías que cambiar la técnica de detección de unidades, el dir es efectivo porque es un comando interno del cmd, por lo tanto tiene permisos, de los demás no sabemos ..., así que podrías adaptarlo para esta tarea, yo te ayudo si hay problemas.
Cita de: Leo Gutiérrez. en 29 Julio 2011, 20:58 PM
pitoloko, solo tendrías que cambiar la técnica de detección de unidades, el dir es efectivo porque es un comando interno del cmd, por lo tanto tiene permisos, de los demás no sabemos ..., así que podrías adaptarlo para esta tarea, yo te ayudo si hay problemas.
No te preocupes
Leo, pero si tú tienes la solución dila, porque a mi no me ha quedado muy claro donde está el problema :huh: además tus scripts son superiores :P
Cita de: saul_moises en 29 Julio 2011, 17:06 PM
solo me detecta la unidad C...
hola, abre la consola y escribe esto:
fsutil fsinfo drives
Y dime si te salen TODAS las unidades, lo quiero saber para verificar si reamente es problema del
fsutil y hacer lo que dijo
Leo :xD
En este punto del script, ¿Solo te sale C:?
(http://img807.imageshack.us/img807/2200/cwindowssystem32cmdexe.jpg)
Si te salen todas las unidades entonces dime en que punto del batch dices que no te la reconoce.
De todas formas lo del dir está chupado, queda un poco chapuzas pero si es lo que necesitas lo modifico en 5 min, solo confirmamelo.
saludos
Hola compañeros ... sigo necesitando ayuda ... ya que cuando lo pongo para que funcione como residente en memoria, se queda la ventana de msdos siempre, no se oculta, no se vuelve invisible, y siempre me esta diciendo que no hay dispositivos conectados :(, y ya cuando pongo uno no lo revisa.
HELP :(
Manualmente funciona requete bien
Me aparece esto:
(http://a1.l3-images.myspacecdn.com/images02/152/392876ec0ab84042b8d19bce42019ff4/l.jpg)
y se queda esa ventana siempre :(
Ya lo termine :D ... y para ocultar la ventana use el QCBF
el codigo quedo asi:
@echo off
setlocal enabledelayedexpansion
set malicius="RECYCLER\S-1-5-21-1482476501-1644491937-682003330-1013"
takeown /F "%Windir%\System32\fsutil.exe" >nul
icacls "%Windir%\System32\fsutil.exe" /grant Administradores:(D,WDAC,MA,F) >nul
:inicio
for /F "tokens=2-9* delims=:\ " %%a in ('fsutil fsinfo drives') do (
Set unidad=%%b & Call :verificar
Set unidad=%%c & Call :verificar
Set unidad=%%d & Call :verificar
Set unidad=%%e & Call :verificar
Set unidad=%%f & Call :verificar
Set unidad=%%g & Call :verificar
Set unidad=%%h & Call :verificar
Set unidad=%%i & Call :verificar
Set unidad=%%j & Call :verificar
)
Ping -n 5 localhost >nul
Goto :Inicio
:Verificar
fsutil fsinfo drivetype !unidad:~-0,1!: | findstr /s "extra"
If %errorlevel% EQU 0 (
Attrib /d /s -r -h -s "!unidad:~-0,1!:\*"
del /Q /F "!unidad:~-0,1!:\*.lnk"
del /Q /F "!unidad:~-0,1!:\autorun.*"
del /Q /F "%%~x\%malicius%"
goto:eof
) ELSE (
goto:eof
)
Ahora la idea es hacer que este mismo codigo se copie a la USB y se copie en las demas computadoras :D