Recorrer directorios y generar log (BATCH)

Iniciado por Dany3j, 29 Junio 2011, 18:27 PM

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

Dany3j

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

SuperDraco

#1
 :¬¬ 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 (dos) [Seleccionar]
Dir /B /S > Log.txt




Código (dos) [Seleccionar]
Dir /?

/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 (dos) [Seleccionar]

@echo off
Title=Foro.Elhacker.Net

REM Simple LOG de directorios.
REM By PiToLoKo
REM Foro.Elhacker.Net

echo+   >> "%temp%\Log.txt"
echo ============================= >> "%temp%\Log.txt"
Echo Fecha del escaneo: %Date%     >> "%temp%\Log.txt"
echo ============================= >> "%temp%\Log.txt"
echo+   >> "%temp%\Log.txt"

Echo+ & echo+ El directorio actual es:
Echo  %cd%
Echo+ & echo+ Pulse una tecla para empezar el escaneo...
pause >nul 2>&1

For /F "tokens=*" %%a in ('Dir /B /S /A:D') do (
Set folder=%%a
Call :Scan
)

Title=foro.elhacker.net
echo+
echo  ===========================
Echo   El escaneo ha finalizado.
echo  ===========================
Notepad "%temp%\Log.txt"
Pause >nul
exit

:Scan
Title=Escaneo en progreso..."
Echo Escaneando "%folder%"

Echo -=[ %folder% ]=- >> "%temp%\Log.txt"
echo+  >> "%temp%\Log.txt"

Dir /B /A-D "%folder%">> "%temp%\Log.txt"
echo+ >> "%temp%\Log.txt"

goto:eof


En fin, se pueden hacer muchas cosas... xD
No he vuelto, solo estoy de paso.

Dany3j

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

SuperDraco

Cita de: dany3j en 29 Junio 2011, 20:48 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
No he vuelto, solo estoy de paso.

Dany3j

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

SuperDraco

#5
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 (vb) [Seleccionar]


Dim objFileSystem, objTheFolder
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objTheFolder = objFileSystem.GetFolder(wscript.arguments(0))

If objTheFolder.size > 1 then
wscript.quit(0)
else
wscript.quit(1)
end if



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

Código (dos) [Seleccionar]
@echo off
:Carpetas vacias
For /F "Tokens=*" %%a in ('dir /B /S /A:D "RUTA_DE_LA_CARPETA"') do (
set folder=%%a
call :Comprobar carpeta)


:Comprobar carpeta
"Comprobar_Carpetas_vacias.vbs" "!folder!"
If %errorlevel% EQU 0 (
goto:eof
) ELSE (
rd /q "!carpeta!\"
goto:eof
)





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 (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

for /f "tokens=*" %%a in ('dir /B /s /A-D "%systemdrive%\*.exe"') do (
set archivo=%%a
set size=%%~za
call :log
)


:log
If !size! EQU 0 (
echo !archivo! >> log.txt
echo !size! >> log.txt
echo+ >> log.txt
del /Q /F "!archivo!"
goto:eof
) ELSE (
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.
No he vuelto, solo estoy de paso.

Dany3j

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

SuperDraco

Cita de: 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:

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 (dos) [Seleccionar]
@echo off
if not exist "Comprobar_accesos_directos_rotos.vbs" (goto :next37)
if not exist "Comprobar_Carpetas_vacias.vbs" (goto :next37)

setlocal enabledelayedexpansion


:Desktop.ini
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")
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")



:Accesos directos rotos
For /F "Tokens=*" %%a in ('dir /B /S "%appdata%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
Set archivo="%%a"
call :comprobar)

For /F "Tokens=*" %%a in ('dir /B /S "%ProgramData%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
Set archivo="%%a"
call :comprobar)



:Carpetas vacias
For /F "Tokens=*" %%a in ('dir /B /S /A:D "%appdata%\Microsoft\Windows\Start Menu\Programs\"') do (
set carpeta=%%a
call :Comprobar carpeta)

For /F "Tokens=*" %%a in ('dir /B /S /A:D "%ProgramData%\Microsoft\Windows\Start Menu\Programs\"') do (
set carpeta=%%a
call :Comprobar carpeta)


setlocal disabledelayedexpansion



goto :next37



:Comprobar
Comprobar_accesos_directos_rotos.vbs !archivo!

If %errorlevel% EQU 0 (
goto:eof
) ELSE (
Del /Q /F !archivo!
goto:eof
)


:Comprobar carpeta
"Comprobar_Carpetas_vacias.vbs" "!carpeta!"

If %errorlevel% EQU 0 (
goto:eof
) ELSE (
rd /q "!carpeta!\"
goto:eof
)






Comprobar_accesos_directos_rotos.vbs

Código (vb) [Seleccionar]
set objshell = createobject("wscript.shell")
set objlink = objshell.createshortcut(wscript.arguments(0))
set objfso = createobject("scripting.filesystemobject")
if objfso.fileexists(objlink.targetpath) then
wscript.quit(0)
else
wscript.quit(1)
end if
No he vuelto, solo estoy de paso.

Dany3j

Si es cierto muchasimas gracias por todo pitoloko manos a la obra... voy a terminar mi pequeña herramienta despues publico como me fue.  ;-)
"Pensando en Batch" XD