2009-06-08 6 views
0

Je structure de répertoire:comment faire liste des fichiers en utilisant le script .bat

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

Je dois faire un fichier texte en utilisant le script files.bat avec liste des fichiers comme ceci:

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

Comment faire une telle liste de fichiers?

Nous vous remercions à l'avance

Répondre

2

J'ai bricolé le script suivant:

@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 

Peut-être pas exactement ce dont vous avez besoin, mais devrait fournir un point de départ. La sortie est cependant identique. Pour l'arborescence fichier/répertoire suivant:

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

en cours d'exécution du lot produira la sortie suivante:

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 
+0

Merci beaucoup! C'est exactement ce que je voulais. – phpcoder

+0

Le peut-être vous devriez marquer la question répondu;) – Oorang

0
dir /A:-D /B /S>out.txt 

qui obtiennent de vous le plus de ce que vous voulez.

+0

Merci, mais je dois boucle pour générer dans la chaîne File0001, File0002 etc Et aussi je besoin relatif chemin vers le fichier dir/A: -D/B/S>out.txt affiche le chemin complet – phpcoder

0

Commencez par quelque chose le long des lignes de:

@echo off 

call :dodir . 
goto eof 

:dodir 
set TEMP_CUR_DIR="%*" 
REM echo Directory %TEMP_CUR_DIR%: 
for %%f in (%TEMP_CUR_DIR%\*) do call :dofile %%f 
for /d %%d in (%TEMP_CUR_DIR%\*) do call :dodir %%d 
goto eof 

:dofile 
set TEMP_CUR_FILE="%*" 
echo File: %TEMP_CUR_FILE% 
goto eof 

:eof 
Questions connexes