Seleccionar unidad y ejecutar comando

Iniciado por Dany3j, 29 Junio 2011, 03:29 AM

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

Dany3j

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...  ;-)
"Pensando en Batch" XD

SuperDraco

#1
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





Código (dos) [Seleccionar]

@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 :)

No he vuelto, solo estoy de paso.

Dany3j

GRacias pitoloko  ;-) si voy a repasar un poco lo que pasa que no domino mucho programacion bath. 
"Pensando en Batch" XD

leogtz

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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dany3j

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  ;-)
"Pensando en Batch" XD

SuperDraco

#5
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
No he vuelto, solo estoy de paso.

Dany3j

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
"Pensando en Batch" XD

WaAYa HaCK




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!
La cacatúa yoyó es nueva en el zoo!

SuperDraco

#8
Es el color que tenía su batch xD, si por mi fuera...  ;)




:silbar:
No he vuelto, solo estoy de paso.

Dany3j

Cita de: pitoloko en  1 Julio 2011, 13:54 PM
Es el color que tenía su batch xD, si por mi fuera...  ;)




:silbar:

Te quedo rebien porfa si puede publicar el codigo...  :laugh: me gusto mucho.
"Pensando en Batch" XD