[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [知识] for /d /r 可以枚举所有子文件夹

很多人说, for /d 只能匹配第一层目录,对了一半。
  1. for /d /r %%i in (*) do echo %%i
复制代码

/r /d 可以替代dir的大部分命令参数
/r /d效率要比for+dir高些
  1. @echo off
  2. REM /d Directory 文件夹
  3. REM /r Recurse 递归(对某个目录进行递归操作.默认递归文件,加上/d参数则递归文件夹)
  4. REM 指定文件夹
  5. set "folder=C:\Users\lenovo\Desktop\test"
  6. REM 获取文件 (dir /b /a-d)
  7. for %%i in ("%folder%\*") do echo %%i
  8. REM 递归获取文件 (dir /s /b /a-d)
  9. for /r "%folder%" %%i in ("*") do echo %%i
  10. REM 获取文件夹 (dir /b /ad)
  11. for /d %%i in ("%folder%\*") do echo %%i
  12. REM 递归获取文件夹 (dir /s /b /ad)
  13. for /r "%folder%" /d %%i in ("*") do echo %%i
  14. pause&exit
复制代码

TOP

有没有想过有隐藏文件怎么办?

TOP

强烈建议减少使用for /f +dir,建议使用for /d /r
理由:for /f +dir原理是建立 新的子进程cmd.exe,处理dir指令,它的stdout输出字符串转换成ANSI字节数组array1,然后原cmd.exe进程将stdin重定向到array1,由ANSI字节数组转换为字符串,这其实就是管道传输的过程一致的.但是平常看不出差别,一旦文件名含有Unicode字符就会丢失字符变成问号?,这样就会导致找不到文件路径....自己可以测试一下.
而for /d /r就可以完全避免Unicode文件名问题,因为它没有经过两个转换过程(char->byte和byte->char),它是一直以Unicode字符来处理文件名的,所以不会出现乱码和找不到文件路径的问题.
微信:flashercs
QQ:49908356

TOP

回复 3# 不知道是谁
隐藏文件就只有用for+dir 了
for /r可以列出系统文件和正常文件,就是列不出隐藏文件,

TOP

返回列表