Search code examples
batch-filefile-listing

how to make file listing using the .bat script


I have directory structure:

pakages
|-files.bat
|-component
  |-source
  |-lib

I need to make text file using the files.bat script with file listing like this:

 File0001=source\WindowT.pas
 File0002=source\AWindowT.pas
 File0003=source\AWindowSplash.pas
 File0004=source\InternalT.pas
 File0005=source\ImageLister.pas
 File0006=lib\LIcons.res
 File0007=lib\TstandartBtn_16.RES
 File0008=lib\TstandartBtn_24.RES

......etc

How to make such file listing?

Thank you in advance


Solution

  • I have cobbled together the following script:

    @echo off
    setlocal
    rem The number of the current file, gets incremented
    set FileNumber=1
    rem Move into "component" directory, the following "for" command will 
    pushd %~dp0\component
    rem loop over directories there
    for /d %%f in (*) do call :process "%%f"
    rem move into the previous directory again
    popd
    endlocal
    goto :eof
    
    :process
    rem process files
    for /f %%x in ('dir /b /a:-d %1 2^>nul') do call :process_files %~1 %%x
    rem go down recursively, if there are more subdirectories
    for /f %%d in ('dir /b /a:+d %1 2^>nul') do call :process %%d
    goto :eof
    
    :process_files
    call :leadingzeros %FileNumber%
    rem Output line
    echo File%RESULT%=%~1\%2
    set /a FileNumber+=1
    goto :eof
    
    rem Parameter: a non-negative number <= 9999
    rem Result: a string with zero padding at the start
    :leadingzeros
    if %1 LSS 10 set RESULT=000%1&goto :eof
    if %1 LSS 100 set RESULT=00%1&goto :eof
    if %1 LSS 1000 set RESULT=0%1&goto :eof
    set RESULT=%1
    goto :eof
    

    It may be not exactly what you need, but should provide a starting point. The output, however, is identical. For the following file/directory tree:

        packages
        │   files.cmd
        │
        └───component
            ├───lib
            │       LIcons.res
            │       TstandardBtn_16.RES
            │       TstandardBtn_24.RES
            │
            └───source
                    AWindowSplash.pas
                    AWindowT.pas
                    ImageLister.pas
                    InternalT.pas
                    WindowT.pas

    running the batch will produce the following output:

    File0001=lib\LIcons.res
    File0002=lib\TstandardBtn_16.RES
    File0003=lib\TstandardBtn_24.RES
    File0004=source\AWindowSplash.pas
    File0005=source\AWindowT.pas
    File0006=source\ImageLister.pas
    File0007=source\InternalT.pas
    File0008=source\WindowT.pas