dos下遍历目录和文件的代码(主要利用for命令)

===== 文件夹结构 =============================================
D:\test
---A Folder 1
|-----A file 1.txt

|-----A file 2.txt
|-----A file 3.txt
---B Folder 2
|-----B file 1.txt
|-----B file 2.txt
|-----B file 3.txt
|---B Folder 3
|-----B sub file 1.txt
|-----B sub file 2.txt
|-----B sub file 3.txt



代码如下:

@echo off
set work_path=D:\test
D:
cd %work_path%
for /R %%s in (.,*) do (
echo %%s
)
pause

结果
D:\test\.
D:\test\A Folder 1\.
D:\test\A Folder 1\A file 1.txt
D:\test\A Folder 1\A file 2.txt
D:\test\A Folder 1\A file 3.txt
D:\test\B Folder 2\.
D:\test\B Folder 2\B file 1.txt
D:\test\B Folder 2\B file 2.txt
D:\test\B Folder 2\B file 3.txt
D:\test\B Folder 2\B Folder 3\.
D:\test\B Folder 2\B Folder 3\B sub file 1.txt
D:\test\B Folder 2\B Folder 3\B sub file 2.txt
D:\test\B Folder 2\B Folder 3\B sub file 3.txt


代码如下:

@echo off
set work_path=D:\test
D:
cd %work_path%
for /R %%s in (.) do (
echo %%s
)
pause

结果
D:\test\.
D:\test\A Folder 1\.
D:\test\A Folder 1\A file 1.txt
D:\test\A Folder 1\A file 2.txt
D:\test\A Folder 1\A file 3.txt
D:\test\B Folder 2\.
D:\test\B Folder 2\B file 1.txt
D:\test\B Folder 2\B file 2.txt
D:\test\B Folder 2\B file 3.txt
D:\test\B Folder 2\B Folder 3\.
D:\test\B Folder 2\B Folder 3\B sub file 1.txt
D:\test\B Folder 2\B Folder 3\B sub file 2.txt
D:\test\B Folder 2\B Folder 3\B sub file 3.txt

那么


代码如下:

for /R %%s in (.,*) do (
echo %%s
)




代码如下:

for /R %%s in (.) do (
echo %%s
)

的区别是什么呢?
在有cd %work_path% 的时候,这两个命令执行的结果是一样的,就像我们上面举的例子。但是
for /R %%s in (.,*) do (
echo %%s
)
的批处理中没有cd %work_path% ,那么显示的将是这个批处理文件所在文件夹下面的遍历结果。

代码如下:

@echo off
for /R "D:\test" %%s in (.) do (
echo %%s
)
pause

结果
D:\test\.
D:\test\A Folder 1\.
D:\test\B Folder 2\.
D:\test\B Folder 2\B Folder 3\.


代码如下:

@echo off
for /R "D:\test" %%s in (.,*) do (
echo %%s
)
pause

结果
D:\test\.
D:\test\A Folder 1\.
D:\test\A Folder 1\A file 1.txt
D:\test\A Folder 1\A file 2.txt
D:\test\A Folder 1\A file 3.txt
D:\test\B Folder 2\.
D:\test\B Folder 2\B file 1.txt
D:\test\B Folder 2\B file 2.txt
D:\test\B Folder 2\B file 3.txt
D:\test\B Folder 2\B Folder 3\.
D:\test\B Folder 2\B Folder 3\B sub file 1.txt
D:\test\B Folder 2\B Folder 3\B sub file 2.txt
D:\test\B Folder 2\B Folder 3\B sub file 3.txt

这样的话看出来区别了吧。

再看一个=================================


代码如下:

@echo off
for /R "D:\test" %%s in (*) do (
echo %%s
)
pause

结果
D:\test\A Folder 1\A file 1.txt
D:\test\A Folder 1\A file 2.txt
D:\test\A Folder 1\A file 3.txt
D:\test\B Folder 2\B file 1.txt
D:\test\B Folder 2\B file 2.txt
D:\test\B Folder 2\B file 3.txt
D:\test\B Folder 2\B Folder 3\B sub file 1.txt
D:\test\B Folder 2\B Folder 3\B sub file 2.txt
D:\test\B Folder 2\B Folder 3\B sub file 3.txt
就是只显示了文件
VisitF.bat - 对指定路径指定文件进行遍历的程序


代码如下:

:: VisitF.bat - 对指定路径指定文件进行遍历的程序
:: 第一参数为要遍历的文件(支持通配符),第二参数为要遍历的路径(缺省为C盘根)
@echo off
:main
if [%1]==[] if not exist goto end
:init
if exist if exist goto loop
set file=%1
set base=%2
if [%2]==[] set base=c:
dir %base%\%file% /s /a /b >
echo e 100 ''set file='' >
echo w >>
echo q >>
:loop
fc nul /n | find " 1:" > setfile.bat
if errorlevel 1 goto restore
debug setfile.bat nul
call setfile.bat
echo Visiting the file: %file%
:: User specified visit code replace this line
find "%file%" /v
copy > nul
goto loop
:restore
if exist del
if exist del
if exist del
if exist setfile.bat del setfile.bat
:end

VisitD.bat - 对指定路径指定目录进行遍历的程序


代码如下:

:: VisitD.bat - 对指定路径指定目录进行遍历的程序
:: 第一参数为要遍历的目录(支持通配符),第二参数为要遍历的路径(缺省为C盘根)
@echo off
:main
if [%1]==[] if not exist goto end
:init
if exist if exist goto loop
set dir=%1
set base=%2
if [%2]==[] set base=c:
dir %base%\%dir% /s /ad /b >
echo e 100 'set dir=' >
echo w >>
echo q >>
:loop
fc nul /n | find " 1:" > setdir.bat
if errorlevel 1 goto restore
debug setdir.bat nul
call setdir.bat
echo Visiting the dir: %dir%
:: User specified visit code replace this line
find "%dir%" /v
copy > nul
goto loop
:restore
if exist del
if exist del
if exist del
if exist setdir.bat del setdir.bat
:end

VisitL.bat - 对指定文件列表中的文件进行遍历的程序


代码如下:

:: VisitL.bat - 对指定文件列表中的文件进行遍历的程序
:: 参数为要遍历的文件列表
@echo off
:main
if [%1]==[] if not exist goto end
:init
set filelist=%1
if [%1]==[] set filelist=
if not exist %filelist% goto end
copy %filelist% > nul
if exist goto loop
echo e 100 'set file=' >
echo w >>
echo q >>
:loop
fc nul /n | find " 1:" > setfile.bat
if errorlevel 1 goto restore
debug setfile.bat nul
call setfile.bat
echo Visiting the file: %file%
:: User specified visit code replace this line
find "%file%" /v
copy > nul
goto loop
:restore
if exist del
if exist del
if exist del
if exist setfile.bat del setfile.bat
:end

VisitI.bat - 对指定路径指定DIR信息的文件进行遍历操作的的程序


代码如下:

:: VisitI.bat - 对指定路径指定DIR信息的文件进行遍历操作的的程序
:: 第一参数为指定的DIR信息项,第二参数为要遍历的路径(缺省为当前路径)
:: 注意:DIR信息项可以是文件名,扩展名,日期,时间等DIR命令提供的目录信息项
:: 可以同时使用多项,但必须加一对引号,参数格式也须严格符合DIR的信息格式
@echo off
:main
if [%1]==[] goto end
:init
if exist if exist goto loop
set info=%1
set base=%2
if [%2]==[] set base=.
dir %base%\. /s /a /b >
echo e 100 ''''set file='''' >
echo w >>
echo q >>
:loop
fc nul /n | find " 1:" > setfile.bat
if errorlevel 1 goto restore
debug setfile.bat nul
call setfile.bat
dir "%file%" | find %info% > nul
if not errorlevel 1 echo Visit file: "%file%"
:: if not errorlevel 1
find "%file%" /v
:: "%file%" 参数决定了所匹配的子目录下的所有文件和目录均不会再次匹配
copy > nul
goto loop
:restore
if exist del
if exist del
if exist del
if exist setfile.bat del setfile.bat
set info=
set file=
set base=
:end

Visit.bat - 文件遍历批处理程序


代码如下:

:: Visit.bat - 文件遍历批处理程序
:: Will Sort - 10/17/2004 - V2
::
:: 程序用途:
:: 对指定文件集/目录集/文件列表执行指定操作
::
:: 命令行说明:
:: 1. VISIT 文件集/目录集 [参数]
:: 对文件集/目录集执行指定操作
:: 2. VISIT @ 文件列表
:: 对指定文件列表中的文件执行指定操作
::
:: 注意事项:
:: - 文件集/目录集 中可包含有效路径和通配符
:: - 路径缺省为当前路径,文件集缺省为 *.* (并非所有文件)
:: - 文件集/目录集 含空格时需用双引号引起
:: - [参数] 支持的DIR开关: /S /A /O /L等不与 /B 冲突者
:: - [参数] 不支持的DIR开关: /W /P /V 等与 /B 冲突者
:: - [操作] 由调用者预先写入 visitcmd.bat 中
:: - [操作] 中使用 %VisitFile% 引用遍历文件
:: - 程序检查检查 [文件列表] 是否存在,但不检查它是否有效
:: - 不遍历隐藏/系统目录下的目录和文件(在命令行中指定时例外)
::
:: 用法示例:
:: visit c:\ /ad /s 遍历C盘所有目录,包含子目录
:: visit "C:\My document" /a-d 遍历"C:\My document"下所有文件
:: visit C:\*.zip /a /s 遍历C盘所有.zip压缩包,包含子目录
:: 如想遍历多个文件/目录集,可多次使用"DIR 文件集 /a /s>>文件列表"
:: 生成一个完整的文件列表,再使用文件列表进行遍历;或者使用VisitCE.Bat
:: 在遍历未显式指定的隐藏/系统目录时,可以用"attrib 文件集 /s"生成
:: 文件列表,然后在visitcmd.bat的代码中引用%VisitFile%第三至最后的串,
:: 再使用文件列表进行遍历
::
:: 测试报告:
:: 在 Win98 命令行方式下有限黑箱测试通过
:: 性能仍然是最大的瓶颈
::
@echo off
if "%1"=="@" goto CopyList
:MakeList
dir /b %1 %2 %3 %4 %5 %6 > ~
find "~" /v < ~ > ~
if not errorlevel 1 copy ~ ~>nul
goto MakePreLine
:CopyList
if not [%2]==[] if exist %2 copy %2 ~>nul
if not exist ~ goto End
:MakePreLine
echo set VisitFile=> ~
for %%c in (rcx e w q) do echo %%c>> ~
debug ~ < ~ > nul
if [%OS%]==[Windows_NT] chcp 936 > nul
:LoopVisit
copy ~+~ ~ > nul
find "set VisitFile=" < ~ > ~visit.bat
call ~visit.bat
if "%VisitFile%"=="" goto Clear
if not exist visitcmd.bat echo Visiting %VisitFile%
if exist visitcmd.bat call visitcmd.bat
find "set VisitFile=" /v < ~ > ~
goto LoopVisit
:Clear
del ~visit.*
set VisitFile=
:End

VisitCE.bat - 文件遍历批处理程序命令行增强版


代码如下:

:: VisitCE.bat - 文件遍历批处理程序命令行增强版
:: Will Sort - 10/17/2004 - V2CE
::
:: 程序用途:
:: 对指定路径/文件列表下的指定文件/目录集执行指定操作
::
:: 命令行说明:
:: 1. VISIT [路径1 路径2...] [开关1 开关2...] [文件集1 文件集2...]
:: 对 [路径] 和 [开关] 限定下的 [文件集] 执行指定操作
:: 2. VISIT @ 文件列表1 [文件列表2...]
:: 对指定 [文件列表] 中的文件执行指定操作
::
:: 注意事项:
:: - [路径] [参数] [文件集] 均可不选或多选
:: - [路径] 中不可包含通配符,[文件集] 中可包含有效路径和通配符
:: - [路径] 缺省为当前路径,[文件集] 缺省为 *.* (并非所有文件)
:: - [路径] [文件集] 含空格时需用双引号引起
:: - [参数] 支持的DIR开关: /S /A /O /L等不与 /B 冲突者
:: - [参数] 不支持的DIR开关: /W /P /V 等与 /B 冲突者
:: - [操作] 由调用者预先写入 visitcmd.bat 中
:: - [操作] 中使用 %VisitFile% 引用遍历文件
:: - 程序检查检查 [文件列表] 是否存在,但不检查它是否有效
:: - 不遍历隐藏/系统目录下的目录和文件(在命令行中指定时例外)
::
:: 用法示例:
:: visit c:\ /ad /s 遍历C盘所有目录,包含所有子目录
:: visit "C:\My document" /a-d 遍历"C:\My document"下所有文件
:: visit c:\ d:\ e:\ /s /a /on 遍历C,D,E中所有文件,并按文件名排序
:: visit \ /a 遍历当前盘根目下所有文件和目录
:: 在遍历未显式指定的隐藏/系统目录时,可以用"attrib 文件集 /s"生成
:: 文件列表,然后在visitcmd.bat的代码中引用%VisitFile%第三至最后的串,
:: 再使用文件列表进行遍历
::
:: 测试报告:
:: 在 Win98 命令行方式下有限黑箱测试通过
:: 性能仍然是最大的瓶颈
::
@echo off
if "%1"=="$" goto MakeList
if "%1"=="@" goto CopyList
if "%1"=="" goto End
set VisitCommand=%0
:GetArgu
:GetPath
if not exist %1.\nul goto GetSwitch
set VisitPath=%VisitPath% %1
goto GetNext
:GetSwitch
echo %1 | find "/" > nul
if errorlevel 1 goto GetFilter
set VisitSwitch=%VisitSwitch% %1
goto GetNext
:GetFilter
echo %1 | find "*" > nul
if not errorlevel 1 goto SetFilter
echo %1 | find "?" > nul
if errorlevel 1 goto End
:SetFilter
set VisitFilter=%VisitFilter% %1
:GetNext
shift
if not [%1]==[] goto GetArgu
%VisitCommand% $ %VisitFilter%
:MakeList
if not [%VisitPath%]==[] goto ForMake
:DirMake
dir %2 /b %VisitSwitch% >> ~
goto MakeNext
:ForMake
for %%p in (%VisitPath%) do dir %%p.\%2 /b %VisitSwitch% >> ~
:MakeNext
shift
if not [%2]==[] goto MakeList
find "~" /v < ~ > ~
if not errorlevel 1 copy ~ ~>nul
goto MakePreLine
:CopyList
if not [%2]==[] if exist %2 type %2>>~
shift
if not [%2]==[] goto CopyList
:MakePreLine
if not exist ~ goto End
echo set VisitFile=> ~
for %%c in (rcx e w q) do echo %%c>> ~
debug ~ < ~ > nul
if [%OS%]==[Windows_NT] chcp 936 > nul
:LoopVisit
copy ~+~ ~ > nul
find "set VisitFile=" < ~ > ~visit.bat
call ~visit.bat
if "%VisitFile%"=="" goto Clear
if not exist visitcmd.bat echo Visiting %VisitPath% %VisitSwitch% %VisitFilter% - %VisitFile%
if exist visitcmd.bat call visitcmd.bat
find "set VisitFile=" /v < ~ > ~
goto LoopVisit
:Clear
for %%f in (~visit.*) do del %%f
for %%e in (Command Path Switch Filter File) do set Visit%%e=
:End

在2000sp4 下出现类似的问题,第二个问题实际上也是fc的不兼容问题,他在按行号显示时,每行文字前有8 个字节位,而不是dos6和win9x 下的9 个,所以解决起来也很简单,将debug 脚本中的 e 100 'set file='改为 e 100 'set fil=' 即可。

  但是,这只是就事论事而已,以上的提到的三个批处理,只是我在dos 下练兵用的试验原型,做得很粗糙,自从今年3 月份正式转向win98 之后,使用中遇到了很多新问题,比如文件名包含空格的问题,系统/ 隐藏属性目录的问题;在nt下使用,又遇到了中文文件名的问题;而且由于循环体中使用了过多的文本流控制,导致了效率的严重低下;另外,三个程序功能上和实现上并没有太大的差别,没有拆分的必要。
  综所上述,将以上代码重写就成为必须。合并代码,弥补漏洞,改善性能,书写文档,就出现了所谓的 V2 版,这中间其实并没有花很多功夫。

  然而,一个偶然的下午,突然心血来潮,何不将visit 的命令行功能做一下增强,比如支持多个路径、多个过滤器(filter)、多个文件列表,原想只是加一个命令行参数分析循环,然而真正实现起来,却再次体会到了命令行的复杂,if for嵌套时冲定向输出,判定目录时根目录与子目录的不同,for 对过滤器的低能替换(win9x/dos) ,一个个新问题摩肩接踵,层出不穷,竟然整整耗了我大半个工作日的时间,才勉强实现了一个粗糙的版本,这就是所谓的 V2CE 版,对与严格的测试我没有多大的信心。

  现在,再回头看我的工作,其实那个 V2CE 版其实是没有多大的应用价值。多个路径和过滤器,完全可以通过多次调用visit 来实现,而且实际上,我们大多数情况下只用一个路径和过滤器;而且,多参数控制带来了易用度的下降,用户总是对参数繁多的程序有一定的心理障碍,我个人对dos 压缩软件的爱好,从高到低依次是rar,zip,arj, 易用度就是第一靠量;另外,最重要的是,多参数控制导致了代码量和复杂性的大幅提升,这个程序一度让我钻进了if for构建的幽魂迷宫而不知南北西东,程序的可读性越来越差,调试起来也越来越困难,同时兼容性上拉上了更多的绊马索。

  这些,就是功能提升所付出的代价,虽然这只是一个比较极端的例子,但是功能与简洁的平衡在程序设计的其重要性可见一斑。亲和性的界面并不意味着亲和性的代码,人性化的需求并不意味着人性化的实现,一味将使用方的复杂性转嫁给设计者(比如Windows), 并不是一个很聪明的主意,反之亦然(比如Linux ),这尚不考虑代码功能增强对设计方和使用方的双重施压。

(0)

相关推荐

  • DOS 批处理命令For循环命令详解

    for命令是一种对一系列对象依次循环执行同一个或多个命令的在命令行或批处理中运行的命令,结合一些Windows管理中的程序后,其处理功能强大.应用灵活方便程度令人刮目相看.但是,其帮助信息也因此复杂往往令初学者望而生畏,这里根据本人的学习理解,把其用法分解简化,疏忽和错误也许在所难免. 基本格式 (这里写的是在命令行里用的格式,如果是在批处理中,需要把其中%再多加个%形成%%): for /参数 %变量 in (集) do 命令 (注:上面除中文的以外,其余的是按它的格式要求书写的,大小写都行)

  • 终极dos批处理for循环命令详解

    格式:FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令 作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果. 注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable.变量名称是区分大小写的,所以 %i 不同于 %I. 关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r /f 下面分别解释一下 零:无参数时: FOR %variable IN (set) DO

  • dos命令for用法详解

    for帮助文档 对一组文件中的每一个文件执行某个特定命令. FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数. (set) 指定一个或一组文件.可以使用通配符. command 指定对每个文件执行的命令. command-parameters 为特定命令指定参数或命令行开关. 在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable.变量名称

  • dos之for命令实现扫描网段的端口,用于辅助解决ARP挂马

    不需要任何工具,dos命令扫描一个网段的全部端口!  在win2000下开一个dos窗口,然后执行  for /l %a in (1,1,254) do start /min /low telnet 192.168.0.%a 3389  这样192.168.0.x这个段的所有开放3389端口得主机都会暴露  这条命令执行后  会在任务栏开254个小窗口  然后telnet链接失败的窗口会在大约5秒后自动退出  剩下的窗口就是相对应开放端口的主机了  看一下小窗口的标题可以得知主机的ip地址  如

  • 关于批处理中FOR语句的使用说明与学习技巧

    批处理 bat中的for命令的作用,非常的不错,可以节省很多效率,它可以读取文章的没一行,循环执行ping命令,老探索端口,学习批处理如果不学习for将是个遗憾,希望大家多看看for 命令的实际应用的例子,如果只看简单的基础的使用方法,而缺少实际应用的话,再多的基础也不成,一定先看实例再看基础,带着问题去看基础,相信很快大家就可以上手了,本站有不少这样的资源,大家可以搜下下面我就把for命令的基本参数整理下,大家在学习的时候可以在dos下打for /?来查看帮助,大家都是这样过来的 For 对一

  • dos下遍历目录和文件的代码(主要利用for命令)

    ===== 文件夹结构 ============================================= D:\test ---A Folder 1 |-----A file 1.txt |-----A file 2.txt |-----A file 3.txt ---B Folder 2 |-----B file 1.txt |-----B file 2.txt |-----B file 3.txt |---B Folder 3 |-----B sub

  • Java使用File类遍历目录及文件实例代码

    1. 构造函数 File(String args0)//使用一个表示文件或目录的路径的字符串创建一个File对象 File(URL args0)//使用一个URL对象创建File对象 File(File args0, String args1)//使用一个File对象(一般是目录)和一个文件名字符串创建File对象 File(String args0, String args1)//使用一个目录字符串和一个文件名字符串创建对象 使用File类需要注意两点: 第一,File类用于表示文件或目录的名

  • PHP使用glob函数遍历目录或文件夹的方法

    本文实例讲述了PHP使用glob函数遍历目录或文件夹的方法.分享给大家供大家参考.具体分析如下: 一说到php遍历目录我们很多朋友会想到是opendir与readdir,这样就可以遍历目录并显示文件,但在php中有一个更简洁的遍历目录的函数glob估计很少有人知道此函数,不过我觉得比起opendir与readdir要简单多了. PHP glob函数的使用:glob-寻找与模式匹配的文件路径. 例子,代码如下: 复制代码 代码如下: <?php $fileList=glob('*.*'); for

  • python统计指定目录内文件的代码行数

    python统计指定目录内文件的代码行数,程序实现统计指定目录内各个python文件的代码总行数,注释行数,空行数,并算出所占百分比 这符合一些公司的小需求,实际代码量的统计工作 效果如图 代码如下: #coding:utf-8 import os,re #代码所在目录 FILE_PATH = './' def analyze_code(codefilesource): ''' 打开一个py文件,统计其中的代码行数,包括空行和注释 返回含该文件总行数,注释行数,空行数的列表 :param cod

  • Python读取一个目录下所有目录和文件的方法

    本文实例讲述了Python读取一个目录下所有目录和文件的方法.分享给大家供大家参考,具体如下: 这里介绍的是刚学python时的一个读取目录的列子,给大家分享下: #!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global allFileNum ''' 打印一个目录下的所有文件夹和文件 ''' # 所有文件夹,第一个字段是次目录的级别 dirList = [

  • Linux 中批量提取文件夹下所有目录及文件名称

    1.当前目录下打开CMD控制台窗口,执行如下bat命令:dir *.*/b>文件名.txt 2.如下图例操作步骤: 打开CMD窗口 输入命令 生成文件 结果截图 总结 以上所述是小编给大家介绍的Linux 中批量提取文件夹下所有目录及文件名称 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

  • 易语言调用API函数监视目录与文件的代码

    DLL命令表 .版本 2 .DLL命令 GetPrivateProfileInt, 整数型, , "GetPrivateProfileIntA" .参数 lpAppName, 文本型 .参数 lpKeyName, 文本型 .参数 nDefault, 整数型 .参数 lpFileName, 文本型 .DLL命令 GetPrivateProfileString, 整数型, , "GetPrivateProfileStringA" .参数 lpAppName, 文本型 .

  • php遍历目录与文件夹的多种方法详解

    遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的.PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴.下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋有所帮助.本函数可以列出指定目录下所有的文件(包括子目录下的) 复制代码 代码如下: function getfiles($path){ foreach(scandir($path) as $afile){if($afile=='.'||$afile=='..') continue; if(is_d

  • 深入linux下遍历目录树的方法总结分析

    前几天需要实现对整个目录树的遍历,查阅了相关的一些资料.开始找到的原始的方法是使用readdir()与lstat()函数实现递归遍历,后来发现linux对于目录遍历这种最常用的操作已经提供了很完善的接口:ftw()与nftw().下面就这两种方法具体说明一下.1.手动实现递归1.1 stat()函数族stat函数族包括:stat,fstat以及lstat函数,都是向用户返回文件的属性信息(元数据). 复制代码 代码如下: view plaincopy to clipboardprint?#inc

  • Python 获取指定文件夹下的目录和文件的实现

    经常有需要扫描目录,对文件做批量处理的需求,所以对目录处理这块做了下学习和总结.Python 中扫描目录有两种方法:os.listdir 和 os.walk. 一.os.listdir 方法 os.listdir() 方法用于返回指定的目录下包含的文件或子目录的名字的列表.这个列表以字母顺序.其得到的是仅当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件需要递归. 它也不包括 '.' 和 '..' 即使它在目录中. 语法格式如下: os.listdir(path) 实例代码 def

随机推荐