Hola
He escrito este Script el cual genera un archivo de texto que contiene la lista de archivos con la estructura de archivos del directorio de trabajo y de sus subdirectorios, el directorio de trabajo se puede modificar en las variables del Script, y la lista de archivos en el archivo de listado se registra usando rutas relativa de los archivos de dicho directorio de trabajo.
¿Porque en Batch si siempre me estoy quejando de este "lenguaje"?, para recordar viejos tiempos y porque tuve que escribirlo y testearlo diréctamente desde una VM, con otro lenguaje habria sido aún más coñazo estar testeando de la VM al PC host y viceversa.
Bueno, el script tiene 3 métodos de exclusión de archivos, que son: 1. Por extensión, 2. Por nombres, o 3. Por ruta absoluta, esta última está limitada a la capacidad de caracteres que puede tener un String en Batch (Int32).
El Script tiene 2 métodos de listar los archivos, que son: 1. Listado normal, y 2. Listado incluyendo archivos ocultos.
El Script también tiene capacidad de registrar unformación básica en un Log, y la funcionalidad de medir el tiempo transcurrido de la operación.
Todo lo que he mencionado se puede configurar en las variables que están documentadas con comentarios de ayuda en el código.
Nota: Al explotar la limitada capacidad de Batch añadiendo varias funcionalidades adicionales a un código, este se vuelve demasiado lento, ya que Batch por naturaleza es MUY lento para trabajar, así que ya aviso, si no necesitan excluir archivos entonces no asignen ningún valor en las variables de exclusión.
PD: En el log se guardan las rutas relativas de los archivos que hayan sido excluidas:
Files2List.logExcluded Files:
===============
.\Filesize Truncator.bat
.\Folders2List.bat
.\Windows\WinSxS\Get Manifests.bat
· Una imagen de muestra:(http://img842.imageshack.us/img842/2508/718p.png)
· El código:Files2List.cmd
REM =================
REM Console Settings:
REM =================
Title Files2List - By Elektro
Mode
Con Cols=150 Lines=50
CHCP 1252 1
>NUL & REM Windows-1252, Spanish-Latin.
REM =====
REM Info:
REM =====
Echo ----------------------------------------------------------------------------------------------------------------------------------
Echo This script writes a textfile containing the relative paths of the file structure at the working directory and it's subdirectories
Echo ----------------------------------------------------------------------------------------------------------------------------------
REM ====================
REM User defined values:
REM ====================
REM This value indicates the directory where to list it's file structure.
REM This value indicates the resulting file list.
Set "OutputFile=
%CD%\Files.txt"
REM This value indicates the ubication of the logfile that will record info.
Set "Logfile=
%CD%\
%~n0.log"
REM This value indicates the File-Extensions to exclude during the process.
REM ( Use an ';' delimiter to separate multiple extensions )
Set "ExcludeExts=.bat;.cmd"
REM This value indicates the filenames to exclude during the process.
REM ( Use an ';' delimiter to separate multiple filenames )
REM This value indicates the files to exclude during the process.
REM ( Use an ';' delimiter to separate multiple files )
Set "ExcludeFiles=
%OutputFile%;
%Logfile%"
REM This value indicates how the hidden files are threated when listing the file structure.
REM True = List files and also files with the 'hidden' attribute.
REM False = List only normal files without the 'hidden' attribute.
Set "IncludeHiddenFiles=True"
REM =====
REM Main:
REM =====
:: Call Methods.
Call :
ListFiles "
%IncludeHiddenFiles%"
REM ========
REM Methods:
REM ========
:CreateLog
:: Create the Script Logfile and record starting info on it.
FSutil.exe File CreateNew "
%LogFile%" "0" 1
>NUL(
Echo =========================
Echo %DATE% ^| %TIME:~0,-3% Echo /\/\/\/\/\/\/\/\/\/\/\/\/
Echo [i] Working Directory...:
%WorkingDir% Echo [i] Include Hidden Files:
%IncludeHiddenFiles% Echo [i] Excluded Extensions.:
%ExcludeExts% Echo [i] Excluded Filenames..:
%ExcludeNames% Echo [i] Excluded Files......:
%ExcludeFiles% Echo [i] Output file.........:
%OutputFile% Echo [i] Log file............:
%LogFile% Echo =========================
)>"%LogFile%"
:: Display starting log info.
Type "%LogFile%" | MORE
:: Continue writting log.
(
)>>"%LogFile%"
:EndLog
(
Echo [i] Listed Files..:
%ListedFileCount% files.
Echo [i] Excluded Files:
%ExcludedFileCount% files.
Echo [i] Elapsed Time..:
%ElapsedTime% )>>"%LogFile%"
:: Display ending information.
CLS
Type "%LogFile%"
:StartTimer
Set "StartingDate=
%Date%"
Set "StarttingTime=
%Time:~0,-3%"
:StopTimer
(
Echo Minutes = DateDiff
^("n", "
%StartingDate% %StarttingTime%", Now
^) )>"%TEMP%\%~n0 MinuteDiff.vbs"
For /F "Tokens=*"
%%#
In ( 'Cscript.exe /Nologo "%TEMP%\%~n0 MinuteDiff.vbs"'
)
:ListFiles
Echo [+] Collecting files, this operation could take some minutes long, please wait...
If /I "
%~1"
EQU "True"
(Call :
ListHiddenFiles) If /I "
%~1"
EQU "False"
(Call :
ListNormalFiles)
:ListNormalFiles
(FOR /R "
%WorkingDir%"
%%#
in ("*"
) DO (
(
Echo "
%ExcludeExts%"
| Find.exe /I "
%%~x#" 1
>NUL 2
>&1
) && (
)
)
(
Echo "
%ExcludeNames%"
| Find.exe /I "
%%~nx#" 1
>NUL 2
>&1
) && (
)
)
(
Echo "
%ExcludeFiles%"
| Find.exe /I "
%%~f#" 1
>NUL 2
>&1
) && (
)
)
Set /A "ListedFileCount+=1"
Call Echo %%File:%WorkingDir
%=.%%>>"%LogFile
%"
Set /A "ExcludedFileCount+=1"
)
))>"%OutputFile%"
:ListHiddenFiles
(FOR /F "Tokens=* Delims="
%%#
in ('
Dir /B /S /A-D "
%WorkingDir%\*"'
) DO (
(
Echo "
%ExcludeExts%"
| Find.exe /I "
%%~x#" 1
>NUL 2
>&1
) && (
)
)
(
Echo "
%ExcludeNames%"
| Find.exe /I "
%%~nx#" 1
>NUL 2
>&1
) && (
)
)
(
Echo "
%ExcludeFiles%"
| Find.exe /I "
%%~f#" 1
>NUL 2
>&1
) && (
)
)
Set /A "ListedFileCount+=1"
Call Echo %%File:%WorkingDir
%=.%%>>"%LogFile
%"
Set /A "ExcludedFileCount+=1"
)
))>"%OutputFile%"
REM ===============
REM Error Controls:
REM ===============
:CheckErrors
:: 'IncludeHiddenFiles' Value check.
If /I "
%IncludeHiddenFiles%"
NEQ "True"
If /I "
%IncludeHiddenFiles%"
NEQ "False"
( Echo [x] Error parsing parameter 'IncludeHiddenFiles',
Echo value '
%IncludeHiddenFiles%' is
not a Boolean value.
)
Espero que a alguien le sirva de utilidad.
Saludos!
Gracias por el aporte!, a mi me servirá de mucho en mi trabajo, asi que gracias!!.
Gracias por el aporte!, a mi me servirá de mucho en mi trabajo, asi que gracias!!.
Gracias a ti por comentar.
PD: He actualizado el código en el post de arriba (son pequeños cambios insignificantes).
Saludos!