欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

dos for /r 为什么只遍历文件 不遍历目录 通义 chatgpt 有大用 有大大用

for /r 命令在 DOS(或 CMD)环境下确实可以递归遍历目录及其子目录,但它默认是根据指定的模式匹配文件。如果你想要遍历目录本身而不是文件,你需要显式地指定对目录进行操作。

例如,如果你想列出所有子目录但不包括文件,你可以使用如下方式:

cmd  仅仅遍历目录
for /d /r C:\example %%d in (*) do echo %%d

在这里,

  • /d 参数表示 for 命令将只处理目录名。

  • /r 参数依然用于递归遍历子目录。

%d 将被替换为每个找到的子目录名。

如果你想同时遍历文件和目录,你可能需要写两个独立for /r 循环,一个针对文件另一个针对目录


下面的代码也是只遍历目录 ,不遍历文件,in (*)表示当前目录,也可以写成  in (./*)  

@echo off
rem for test
for /d %%a in (*) do echo %%a
pause>nul




我再次澄清,for /r 命令在不使用 /d 参数时确实会遍历子目录,并且查找子目录下的文件。例如:

cmd
for /r C:\example %%f in (*.txt) do echo %%f    #所有txt文件

for /r C:\example %%f in (*) do echo %%f     #所有文件


这条命令将会递归地查找 C:\example 及其所有子目录下所有的 .txt 文件,并将每个找到的文件路径输出。

若要只遍历子目录而不是文件内容,应像之前所述那样添加 /d 参数:

cmd
for /d /r C:\example %%d in (*) do echo %%d

这里, %d 将替换为在 C:\example 目录及其所有子目录中找到的每一个子目录的名字。


普通分类: