elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Borrar archivo con nombre del directorio. BATCH
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Borrar archivo con nombre del directorio. BATCH  (Leído 6,818 veces)
Dany3j

Desconectado Desconectado

Mensajes: 142


Echo "Aprendiendo Batch."


Ver Perfil
Borrar archivo con nombre del directorio. BATCH
« en: 20 Julio 2011, 21:45 pm »

hello de nuevo..

Esto tratando de hacer algo un poco facil pero la verdad no logro como empezar

Quiero crear una utilidad que borrer un archivo.exe  dentro de una carpeta solo si el archivo tiene el mismo nombre que el directorio en el que se encuentra y solo si es menor de 500kb

por ejemplo.

Tengo en C:/test/

el archivo test1.exe y test.exe en esta ocacion borraria la solo test.exe si es menor a 500kb

pero a su vez hay una carpeta llamada test1/  dentro de test/ que contiene un archivo test1.exe menor a 500kb que debe borrarlo tambien sin afectar los otros archivos que esten dentro de los directorio.

Una vez terminado de borrar imprimir los archivo borrados menores de 500kb y los no borrados menores de un 1000kb asi como tambien mostrar...

Noc a mi me parece un poco dificil por eso no he adjuntado ningun codigo.


En línea

"Pensando en Batch" XD
SuperDraco


Desconectado Desconectado

Mensajes: 2.505


Crew Dragon


Ver Perfil
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #1 en: 21 Julio 2011, 01:22 am »

Hombre, el nivel de ese ejercicio no es tán básico xD

Te he echo este script, a ver que te parece...  :P

EDITO: no se si leiste mi comentarió,pero he tardado un poco más en corregir unos errores que tenía xD, siento la demora...





Bueno, espero que te sirva, al menos como idea  ;)

PD: Para usar mi script en subdirectorios, debes usar "DIR /B /S" y cambiar y añadir unas cosas más para filtrar los nombres largos, pero bueno, eso te lo dejo a ti, ya me lo he currado bastante y no es plan de hacertelo como deseas al 100%  :xD





Código
  1. @echo off
  2. Title www.ElHacker.net
  3.  
  4.  
  5.  
  6.  
  7.  
  8. REM By PiToLoKo
  9. REM Visita: Foro.ElHacker.Net
  10.  
  11.  
  12.  
  13.  
  14.  
  15. REM Seteamos la ruta de trabajo
  16. Set Ruta=C:\test
  17.  
  18.  
  19.  
  20.  
  21.  
  22. REM Creamos las listas de archivos...
  23.  
  24. Echo Archivos Borrados inferiores a 500 KB:>"%temp%\Borrados.txt"
  25. echo+ >>"%temp%\Borrados.txt"
  26.  
  27. Echo Archivos No borrados inferiores a 1024 KB (1 MB):>"%temp%\NO Borrados.txt"
  28. echo+ >>"%temp%\NO Borrados.txt"
  29.  
  30.  
  31.  
  32.  
  33.  
  34. REM Buscamos los archivos dentro de la ruta
  35.  
  36. PUSHD "%ruta%\"
  37.  
  38. For /F "tokens=*" %%a in ('dir /B /A-D "%ruta%"') do (
  39. Set archivo=%%a
  40. Set Bytes=%%~za
  41. Call :Carpeta
  42. )
  43.  
  44. Goto :Fin
  45.  
  46.  
  47.  
  48.  
  49.  
  50. REM Comprobamos si el nombre del archivo es igual al de la ruta
  51.  
  52. :Carpeta
  53.  
  54. Dir ".." /B /A:D | find "%archivo:~-0,-4%" >NUL
  55.  
  56. If %ERRORLEVEL% EQU 0 (
  57. Call :Same__Name_Size
  58. Goto:eof
  59. ) ELSE (
  60. Call :Not_same_Name_Size
  61. Goto:eof
  62. )
  63.  
  64. goto :eof
  65.  
  66.  
  67.  
  68.  
  69.  
  70. :Same__Name_Size
  71.  
  72. REM Si el archivo es menor a 500 KB, lo eliminamos de la ruta.
  73.  
  74. If %Bytes% LSS 512000 (
  75. Del /Q /F "%ruta%\%archivo%"
  76. Echo %archivo%  -= %Bytes% bytes =- >>"%temp%\BORRADOS.txt"
  77. Goto:eof
  78. ) ELSE (
  79. Call :Mayor
  80. goto:eof
  81. )
  82.  
  83.  
  84.  
  85.  
  86.  
  87. REM Si el archivo es mayor a 500 KB pero menor a 1024 KB, NO lo eliminamos y lo añadimos a la lista.
  88.  
  89. :Mayor
  90.  
  91. If %Bytes% LSS 1048576 (
  92. Echo %archivo%  -= %Bytes% bytes =- >>"%temp%\NO BORRADOS.txt"
  93. Goto:eof
  94. ) ELSE (
  95. goto:eof
  96. )
  97.  
  98.  
  99.  
  100.  
  101.  
  102. :Not_same_Name_Size
  103.  
  104. REM Si el archivo es menor a 1024 KB, lo añadimos a la lista.
  105.  
  106. If %Bytes% LSS 1048576 (
  107. Echo %archivo%  -= %Bytes% bytes =- >>"%temp%\NO BORRADOS.txt"
  108. Goto:eof
  109. ) ELSE (
  110. goto:eof
  111. )
  112.  
  113.  
  114.  
  115.  
  116.  
  117. REM Mostramos el resultado de la operación y borramos los archivos temporales.
  118.  
  119. :Fin
  120. Echo Operaci¢n finalizada.
  121. echo.Pulse una tecla para mostrar el resultado...
  122. cls
  123.  
  124. Type "%temp%\Borrados.txt" | MORE
  125. echo+ & echo+ & echo+ & echo+
  126. Type "%temp%\NO Borrados.txt" | MORE
  127.  
  128. Del /Q "%temp%\Borrados.txt";"%temp%\NO Borrados.txt"
  129. echo+ & echo+ & echo+ & echo.Pulse una tecla para salir...
  130.  
  131.  
  132.  
  133.  


« Última modificación: 21 Julio 2011, 03:24 am por pitoloko » En línea

No he vuelto, solo estoy de paso.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #2 en: 21 Julio 2011, 07:36 am »

Aquí está mi solución, recién salida del horno, lo bonito del código es la función "dirname"
que obtiene el directorio en el cual se encuentra un archivo, la función utiliza recursividad y
expresión regular.

Miren:

Citar
C:\Users\leo>dirname c:\Users\leo\HijackThis.exe
[leo\]

C:\Users\leo>dirname "c:\Users\leo\Configuración local"
[leo\]

C:\Users\leo>dirname "c:\Users\leo\Desktop\BeJeweled 2 .lnk"
[Desktop\]

Obtiene el directorio en el cuál está el archivo. Esta función fue necesaria para la comparación entre el nombre de archivo y el directorio en el cual se encuentra el archivo.

Con esto he probado el código:

Citar
C:\Users\leo>cd test

C:\Users\leo\test>tree /f
Listado de rutas de carpetas para el volumen Descargas
El número de serie del volumen es 00000200 466D:2456
C:.
¦   lala.html
¦   log.txt
¦   test.cpp
¦   test.exe
¦   test1.txt
¦
+---algo
¦       .bash_history
¦       10-easy-vim.pdf.zip
¦
+---test1
    ¦   test1.txt
    ¦
    +---algo
            .bash_history
            10-easy-vim.pdf.zip
            algo.bash_history
            algo.zip


C:\Users\leo\test>
test.cpp y test.exe tienen 370 KB y están en el directorio test, por lo cual deben de eliminarse.
En el directorio test1, test1.txt debe ser eliminado porque tiene 6KB y se llama igual que su directorio.
En el directorio algo, algo.bash_history debe ser eliminado porque tiene 170KB y está en el directorio algo.

El script genera un log en el directorio test con la siguiente información:

Citar
No borrar ... lala.html, directorio : C:\Users\leo\test, size : 540KB
Borrar archivo ... test.cpp, directorio : C:\Users\leo\test, size : 370KB
Borrar archivo ... test.exe, directorio : C:\Users\leo\test, size : 370KB
No borrar ... test1.txt, directorio : C:\Users\leo\test, size : 1KB
No borrar ... .bash_history, directorio : C:\Users\leo\test\algo, size : 170KB
Borrar archivo ... test1.txt, directorio : C:\Users\leo\test\test1, size : 6KB
No borrar ... .bash_history, directorio : C:\Users\leo\test\test1\algo, size : 170KB
Borrar archivo ... algo.bash_history, directorio : C:\Users\leo\test\test1\algo, size : 170KB

Código:
@echo off
setlocal enabledelayedexpansion
cd ./test
set dir=%CD%
rem Analizar el directorio actual:
for /f "tokens=*" %%_ in ('dir /b /a-d *.exe') do (
set size=
call:size "%%_"
if !talla! lss 500 (
call:dirname %%~dp_
if "!shit!"=="%%~n_\" (
echo Borrar archivo ... %%_, directorio : !cd!, size : !talla!KB >> "%dir%\log.txt"
) else (
echo No borrar ... %%_, directorio : !cd!, size : !talla!KB >> "%dir%\log.txt"
)
) else (
echo No borrar ... %%_, directorio : !cd!, size : !talla!KB >> "%dir%\log.txt"
)
)
rem Analizar subdirectorios:
for /f "tokens=*" %%_ in ('dir /b /s /ad') do (
pushd "%%_"
for /f "tokens=*" %%f in ('dir /b /a-d *.exe') do (
set size=
call:size "%%f"
if !talla! lss 500 (
call:dirname %%~dpf
if "!shit!"=="%%~nf\" (
echo Borrar archivo ... %%f, directorio : %%_, size : !talla!KB >> "%dir%\log.txt"
) else (
echo No borrar ... %%f, directorio : %%_, size : !talla!KB >> "%dir%\log.txt"
)
)
)
popd
)

goto:eof
:size
set /a talla=%~z1 / 1024 + 1
goto:eof
:dirname
if "%~1"=="" goto:eof
for /f "tokens=1* delims=\" %%a in ("%~1") do (
set shit=%%b
echo %%b | findstr /R "\\.." > nul && call:dirname !shit!
)

Saludos.
« Última modificación: 22 Julio 2011, 22:37 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
SuperDraco


Desconectado Desconectado

Mensajes: 2.505


Crew Dragon


Ver Perfil
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #3 en: 21 Julio 2011, 08:19 am »

Aquí está mi solución, recién salida del horno, lo bonito del código es la función "dirname"

Código:
set shit=%%b

Shit!! :silbar: Has dejado mi script por los suelos... >:( :xD

Muy bueno tu script, como era de esperar!, un saludo!
En línea

No he vuelto, solo estoy de paso.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #4 en: 21 Julio 2011, 08:32 am »

Jaja, perdón por el shit, siempre les pongo nombres malos a mis variables cuando programo rápido :s.

Y tranquilo, seguro que tu script también funciona.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dany3j

Desconectado Desconectado

Mensajes: 142


Echo "Aprendiendo Batch."


Ver Perfil
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #5 en: 21 Julio 2011, 17:20 pm »

Voy a probar los script a ver que tal... Voy a ponerme  estudiarlos Bastante, la verdad noc como hacen ustedes siempre salen con cosas en los script que ni me hubiera imaginado, Ojala y llegue a saber como ustedes un dia de estos.  ;-)
En línea

"Pensando en Batch" XD
Dany3j

Desconectado Desconectado

Mensajes: 142


Echo "Aprendiendo Batch."


Ver Perfil
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #6 en: 21 Julio 2011, 17:41 pm »

A otra cosa Estuve observando bien. Y la función funciona con imágenes Yo me refería que funcionara con archivos .exe Por ejemplo.

Archivos borrados test.exe porque es menor
Archivos no borrados  text1.exe  porque es menor de un 1 mega pero es .exe   :laugh:

En línea

"Pensando en Batch" XD
SuperDraco


Desconectado Desconectado

Mensajes: 2.505


Crew Dragon


Ver Perfil
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #7 en: 21 Julio 2011, 19:04 pm »

A otra cosa Estuve observando bien. Y la función funciona con imágenes Yo me refería que funcionara con archivos .exe Por ejemplo.

 :¬¬

En mi batch por ejemplo, para que solo funcione con archivos de extensión .exe cambais esto...


Código:
For /F "tokens=*" %%a in ('dir /B /A-D "%ruta%\*.exe"')
En línea

No he vuelto, solo estoy de paso.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #8 en: 21 Julio 2011, 20:19 pm »

Los ajustes son mínimos para que los scripts funciones, recuerda que debes de dar todos los datos posibles...
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dany3j

Desconectado Desconectado

Mensajes: 142


Echo "Aprendiendo Batch."


Ver Perfil
Re: Borrar archivo con nombre del directorio. BATCH
« Respuesta #9 en: 22 Julio 2011, 01:55 am »

Ps si tienes razon Leo y Gracias a ambos... Con todo esto codigo tengo que logra algo jeje...  ;-)
En línea

"Pensando en Batch" XD
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programación Batch, Entrando en un directorio de nombre desconocido...
Scripting
_Xerks_ 8 4,874 Último mensaje 31 Julio 2006, 02:39 am
por sch3m4
Cambiar nombre y borrar archivo
PHP
dimitrix 2 2,446 Último mensaje 29 Enero 2008, 02:18 am
por дٳŦ٭
[Batch] obtener nombre de archivo (solucionado)
Scripting
corax 2 10,993 Último mensaje 23 Junio 2009, 20:29 pm
por corax
Borrar solo subdirectorios sin saber nombre [Batch]
Scripting
Dany3j 6 7,094 Último mensaje 29 Julio 2011, 03:48 am
por Dany3j
Seleccionar y borrar directorio con batch
Scripting
rapbyone 0 1,860 Último mensaje 24 Octubre 2015, 20:00 pm
por rapbyone
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines