Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Dany3j en 29 Junio 2011, 18:27 pm



Título: Recorrer directorios y generar log (BATCH)
Publicado por: Dany3j en 29 Junio 2011, 18:27 pm
Hello.. sera que es posible recorrer los directorio y subdirectorios y generar un log.txt con todo lo escaneado algo o algo asi nombre de carpeta y los archivos como lo muestra la funcion dir no tengo ni idea por donde emprezar  :-\


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: SuperDraco en 29 Junio 2011, 19:43 pm
 :¬¬ Me has pillado con ganas de hacerle el trabajo a los demás  :¬¬

Te recomiendo leer un manual básico, todo eso lo aprendes fácil.

Solamente tienes que redireccionar. (>, >>)

Código
  1. Dir /B /S > Log.txt



Código
  1. Dir /?

Código:
/A          Muestra los archivos con los atributos especificados.
atributos    D  Directorios             
             H  Archivos ocultos       
             S  Archivos de sistema
             -  Prefijo de exclusión



Algo más sofisticado, creo que así es más o menos como lo quieres (hecho en 5 minutos +o- XD):

Código
  1. @echo off
  2. Title=Foro.Elhacker.Net
  3.  
  4. REM Simple LOG de directorios.
  5. REM By PiToLoKo
  6. REM Foro.Elhacker.Net
  7.  
  8. echo+   >> "%temp%\Log.txt"
  9. echo ============================= >> "%temp%\Log.txt"
  10. Echo Fecha del escaneo: %Date%     >> "%temp%\Log.txt"
  11. echo ============================= >> "%temp%\Log.txt"
  12. echo+   >> "%temp%\Log.txt"
  13.  
  14. Echo+ & echo+ El directorio actual es:
  15. Echo  %cd%
  16. Echo+ & echo+ Pulse una tecla para empezar el escaneo...
  17. pause >nul 2>&1
  18.  
  19. For /F "tokens=*" %%a in ('Dir /B /S /A:D') do (
  20. Set folder=%%a
  21. Call :Scan
  22. )
  23.  
  24. Title=foro.elhacker.net
  25. echo  ===========================
  26. Echo   El escaneo ha finalizado.
  27. echo  ===========================
  28. Notepad "%temp%\Log.txt"
  29.  
  30. :Scan
  31. Title=Escaneo en progreso..."
  32. Echo Escaneando "%folder%"
  33.  
  34. Echo -=[ %folder% ]=- >> "%temp%\Log.txt"
  35. echo+  >> "%temp%\Log.txt"
  36.  
  37. Dir /B /A-D "%folder%">> "%temp%\Log.txt"
  38. echo+ >> "%temp%\Log.txt"
  39.  
  40. goto:eof
  41.  

En fin, se pueden hacer muchas cosas... xD


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: Dany3j en 29 Junio 2011, 20:48 pm
A ok voy a probar e intento modificar con la funcion que quiero realizar... Es que la verdad a veces veo unos comandos que ni me imagino de donde salieron como hiciste para saber tanto de Batch pitoloko  :-\


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: SuperDraco en 29 Junio 2011, 21:25 pm
como hiciste para saber tanto de Batch pitoloko  :-\

LEER manuales  :¬¬

LEER la ayuda del comando "/?"

Y practicar  :xD

Y postear mis dudas, como tú  :-[

Aqui el verdadero experto en Batch es el mod xD


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: Dany3j en 29 Junio 2011, 22:33 pm
A ok por eso me estoy poniendo a estudiar bastande empezando por lo basico. Pero esto es para hacer un pequeña utilidad para limpiar el pendrive algo parecido a un pequeño antivirus en batch que me cambie los atributos de aarchivos y carpetas ocultas borre los archivos .exe meñores a "x" tamaño las carpetas vacias y al final me de un reporte de lo que ha hecho... lo unico que eso esta muy avanzado para mi conocimiento  :-\ pero bueno espero con esfuerzo y la ayuda de expertos como tu y los moderadores del foro poder hacerlo pronto...  :(


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: SuperDraco en 29 Junio 2011, 22:57 pm
Lo de las carpetas 0 bytes, en batch me dio malos resultados, el comando DIR me mentía  :xD, así que te recomiendo este vbs que me dijo Novlucker, lo ejecutas desde el batch y listo...


"Comprobar_Carpetas_vacias.vbs"

Código
  1.  
  2. Dim objFileSystem, objTheFolder
  3. Set objFileSystem = CreateObject("Scripting.FileSystemObject")
  4. Set objTheFolder = objFileSystem.GetFolder(wscript.arguments(0))
  5.  
  6. If objTheFolder.size > 1 then
  7. wscript.quit(0)
  8. else
  9. wscript.quit(1)
  10. end if
  11.  


para usarlo en un batch, puedes hacerlo por ejemplo así:

Código
  1. @echo off
  2. :Carpetas vacias
  3. For /F "Tokens=*" %%a in ('dir /B /S /A:D "RUTA_DE_LA_CARPETA"') do (
  4. set folder=%%a
  5. call :Comprobar carpeta)
  6.  
  7.  
  8. :Comprobar carpeta
  9. "Comprobar_Carpetas_vacias.vbs" "!folder!"
  10. If %errorlevel% EQU 0 (
  11. goto:eof
  12. ) ELSE (
  13. rd /q "!carpeta!\"
  14. goto:eof
  15. )



Para los archivos menores de X bytes. Puedes usar esto:

~z - display the file size

Aunque como ya he dicho, no recomiendo usarlo sobre carpetas, engaña mucho. En cambio si lo usas sobre archivos nunca me ha dado problemas, y he hecho muchisimas pruebas :xD

en fin aqui un script que posteé hace tiempo:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4. for /f "tokens=*" %%a in ('dir /B /s /A-D "%systemdrive%\*.exe"') do (
  5. set archivo=%%a
  6. set size=%%~za
  7. call :log
  8. )
  9.  
  10.  
  11. :log
  12. If !size! EQU 0 (
  13. echo !archivo! >> log.txt
  14. echo !size! >> log.txt
  15. echo+ >> log.txt
  16. del /Q /F "!archivo!"
  17. goto:eof
  18. ) ELSE (
  19. goto:eof)

Modificalo a tu gusto  :xD

También puedes usar el script de Novlucker, el vbs, solo hay que modificar una cosa:

Set objTheFolder = objFileSystem.GetFolder


Set objTheFolder = objFileSystem.getfile

PD: objTheFolder  no importa, es el nombre de la variable.

saludos.


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: Dany3j en 29 Junio 2011, 23:14 pm
Voy a ver que hago con tanto codigo por lo menos separados los hago funcionar bien y les hago pequeñas modificaciones  :rolleyes: lo dificil va a ser para unir todo eso y llegar a lo que quiero pero vamos a ver si lo puedo hacer nada es imposible para una mente dispuesta dicen por hay.  :laugh:


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: SuperDraco en 30 Junio 2011, 01:06 am
Voy a ver que hago con tanto codigo por lo menos separados los hago funcionar bien y les hago pequeñas modificaciones  :rolleyes: lo dificil va a ser para unir todo eso y llegar a lo que quiero pero vamos a ver si lo puedo hacer nada es imposible para una mente dispuesta dicen por hay.  :laugh:

Unificarlo es fácil, ya te he dado lo más dificil.

Por cierto, se me olvidó comentar que para eliminar carpetas vacías, conviene borrar primero los archivos ocultos "desktop.ini" que genera automáticamente windows. A menos que uses un icono personalizado para cada carpeta... es un archivo inservible, y obviamente esas carpetas ya no se considerarían vacías, aqui otro ejemplo mio sacado de un batch por si te sirve xD


Código
  1. @echo off
  2. if not exist "Comprobar_accesos_directos_rotos.vbs" (goto :next37)
  3. if not exist "Comprobar_Carpetas_vacias.vbs" (goto :next37)
  4.  
  5. setlocal enabledelayedexpansion
  6.  
  7.  
  8. :Desktop.ini
  9. For /F "Tokens=*" %%a in ('dir /B /S /A H "%appdata%\Microsoft\Windows\Start Menu\Programs\*desktop.ini"') do (del /q /F /A H "%%a")
  10. For /F "Tokens=*" %%a in ('dir /B /S /A H "%ProgramData%\Microsoft\Windows\Start Menu\Programs\*desktop.ini"') do (del /q /F /A H "%%a")
  11.  
  12.  
  13.  
  14. :Accesos directos rotos
  15. For /F "Tokens=*" %%a in ('dir /B /S "%appdata%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
  16. Set archivo="%%a"
  17. call :comprobar)
  18.  
  19. For /F "Tokens=*" %%a in ('dir /B /S "%ProgramData%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
  20. Set archivo="%%a"
  21. call :comprobar)
  22.  
  23.  
  24.  
  25. :Carpetas vacias
  26. For /F "Tokens=*" %%a in ('dir /B /S /A:D "%appdata%\Microsoft\Windows\Start Menu\Programs\"') do (
  27. set carpeta=%%a
  28. call :Comprobar carpeta)
  29.  
  30. For /F "Tokens=*" %%a in ('dir /B /S /A:D "%ProgramData%\Microsoft\Windows\Start Menu\Programs\"') do (
  31. set carpeta=%%a
  32. call :Comprobar carpeta)
  33.  
  34.  
  35. setlocal disabledelayedexpansion
  36.  
  37.  
  38.  
  39. goto :next37
  40.  
  41.  
  42.  
  43. :Comprobar
  44. Comprobar_accesos_directos_rotos.vbs !archivo!
  45.  
  46. If %errorlevel% EQU 0 (
  47. goto:eof
  48. ) ELSE (
  49. Del /Q /F !archivo!
  50. goto:eof
  51. )
  52.  
  53.  
  54. :Comprobar carpeta
  55. "Comprobar_Carpetas_vacias.vbs" "!carpeta!"
  56.  
  57. If %errorlevel% EQU 0 (
  58. goto:eof
  59. ) ELSE (
  60. rd /q "!carpeta!\"
  61. goto:eof
  62. )




Comprobar_accesos_directos_rotos.vbs

Código
  1. set objshell = createobject("wscript.shell")
  2. set objlink = objshell.createshortcut(wscript.arguments(0))
  3. set objfso = createobject("scripting.filesystemobject")
  4. if objfso.fileexists(objlink.targetpath) then
  5. wscript.quit(0)
  6. else
  7. wscript.quit(1)
  8. end if


Título: Re: Recorrer directorios y generar log (BATCH)
Publicado por: Dany3j en 30 Junio 2011, 01:39 am
Si es cierto muchasimas gracias por todo pitoloko manos a la obra... voy a terminar mi pequeña herramienta despues publico como me fue.  ;-)