
标题: [文件操作] [知识] for /d /r 可以枚举所有子文件夹 [打印本页]
作者: aries215 时间: 2020-6-14 18:33 标题: [知识] for /d /r 可以枚举所有子文件夹
很多人说, for /d 只能匹配第一层目录,对了一半。- for /d /r %%i in (*) do echo %%i
复制代码
作者: went 时间: 2020-6-14 19:32
/r /d 可以替代dir的大部分命令参数
/r /d效率要比for+dir高些- @echo off
- REM /d Directory 文件夹
- REM /r Recurse 递归(对某个目录进行递归操作.默认递归文件,加上/d参数则递归文件夹)
- REM 指定文件夹
- set "folder=C:\Users\lenovo\Desktop\test"
-
- REM 获取文件 (dir /b /a-d)
- for %%i in ("%folder%\*") do echo %%i
-
- REM 递归获取文件 (dir /s /b /a-d)
- for /r "%folder%" %%i in ("*") do echo %%i
-
- REM 获取文件夹 (dir /b /ad)
- for /d %%i in ("%folder%\*") do echo %%i
-
- REM 递归获取文件夹 (dir /s /b /ad)
- for /r "%folder%" /d %%i in ("*") do echo %%i
-
- pause&exit
复制代码
作者: 不知道是谁 时间: 2020-6-14 22:27
有没有想过有隐藏文件怎么办?
作者: flashercs 时间: 2020-6-14 22:39
强烈建议减少使用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字符来处理文件名的,所以不会出现乱码和找不到文件路径的问题.
作者: went 时间: 2020-6-15 19:19
回复 3# 不知道是谁
隐藏文件就只有用for+dir 了
for /r可以列出系统文件和正常文件,就是列不出隐藏文件,
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |