2009-06-08 55 views
0

我的目录结构:如何使文件,列出使用的.bat脚本

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

我需要使用带有文件files.bat脚本上市这样做文本文件:

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 

......等

如何制作此类文件列表?

预先感谢您

回答

2

我已经拼凑下面的脚本:

@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 

可能不完全是你所需要的,而应该提供一个起点。然而,输出是相同的。对于以下的文件/目录树:

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

运行批处理会产生以下输出:

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

非常感谢!这正是我想要的。 – phpcoder 2009-06-08 14:09:34

+0

也许你应该回答这个问题;) – Oorang 2009-06-11 06:29:48

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

那得到的你最你想要什么。

+0

谢谢,但我需要循环的字符串File0001,File0002等的生成和我也需要相对文件路径 dir/A:-D/B /S>out.txt显示完整路径 – phpcoder 2009-06-08 11:20:45

0

开始沿着线的东西:

@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