user-0 提问: Windows下MakeFile如何获取所有子目录中所有文件的文件列表？

回复:
user: user-1
content: 意思是你在这条整个软件知识链中对DOS命令还不够熟悉。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:意思是你在这条整个软件知识链中对DOS命令还不够熟悉。 感觉，我在这一链条中就没有哪个太熟悉的…… 看来革命道路还很长啊

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复: $(shell dir /b /s /a-d c:\*.*)  C:\>dir /? 显示目录中的文件和子目录列表。  DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]   [/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]    [drive:][path][filename]               指定要列出的驱动器、目录和/或文件。    /A          显示具有指定属性的文件。   attributes   D  目录                R  只读文件                H  隐藏文件            A  准备存档的文件                S  系统文件            -  表示“否”的前缀   /B          使用空格式(没有标题信息或摘要)。   /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来               禁用分隔符显示。   /D          跟宽式相同，但文件是按栏分类列出的。   /L          用小写。   /N          新的长列表格式，其中文件名在最右边。   /O          用分类顺序列出文件。   sortorder    N  按名称(字母顺序)     S  按大小(从小到大)                E  按扩展名(字母顺序)   D  按日期/时间(从先到后)                G  组目录优先           -  反转顺序的前缀   /P          在每个信息屏幕后暂停。   /Q          显示文件所有者。   /S          显示指定目录和所有子目录中的文件。   /T          控制显示或用来分类的时间字符域。   timefield   C  创建时间               A  上次访问时间               W  上次写入的时间   /W          用宽列表格式。   /X          显示为非 8.3 文件名产生的短名称。格式是 /N 的格式，               短名称插在长名称前面。如果没有短名称，在其位置则               显示空白。   /4          用四位数字显示年  可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号) 来替代预先设定的开关。例如，/-W。  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  PATH:=$(subst  /,\,$(abspath .)) FILES := $(patsubst %.c,,  $(notdir $(patsubst $(PATH)\\%,%,$(shell dir .\src  /b /c /s /a-d))))  其实我已经解决了，不过同样谢谢你 但不知你最后写的： 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 是什么意思？

user: user-1
content: $(shell dir /b /s /a-d c:\*.*)  C:\>dir /? 显示目录中的文件和子目录列表。  DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]   [/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]    [drive:][path][filename]               指定要列出的驱动器、目录和/或文件。    /A          显示具有指定属性的文件。   attributes   D  目录                R  只读文件                H  隐藏文件            A  准备存档的文件                S  系统文件            -  表示“否”的前缀   /B          使用空格式(没有标题信息或摘要)。   /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来               禁用分隔符显示。   /D          跟宽式相同，但文件是按栏分类列出的。   /L          用小写。   /N          新的长列表格式，其中文件名在最右边。   /O          用分类顺序列出文件。   sortorder    N  按名称(字母顺序)     S  按大小(从小到大)                E  按扩展名(字母顺序)   D  按日期/时间(从先到后)                G  组目录优先           -  反转顺序的前缀   /P          在每个信息屏幕后暂停。   /Q          显示文件所有者。   /S          显示指定目录和所有子目录中的文件。   /T          控制显示或用来分类的时间字符域。   timefield   C  创建时间               A  上次访问时间               W  上次写入的时间   /W          用宽列表格式。   /X          显示为非 8.3 文件名产生的短名称。格式是 /N 的格式，               短名称插在长名称前面。如果没有短名称，在其位置则               显示空白。   /4          用四位数字显示年  可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号) 来替代预先设定的开关。例如，/-W。  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。  怎么用？FILES := $(system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"))？不行  FILES := system("dir /b /a-d c:\\*.* >d:\\allfiles.txt") 不行  shell虽好，但又加安装一个SuperShell，还要整合到程序中，麻烦 dir /b /a-d c:\\*.*并不能获取子目录的文件列表啊 >d:\\allfiles.txt 你存到一个文件里算什么 用 $(shell dir /b /a-d c:\*.*)可以取得第一层目录的文件列表，但子目录的呢？

user: user-1
content: system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad  c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住，能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作，而不要用各种API获取或者操作，因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时，API会处理的不全面或陷入死循环，而shell命令不会。

user: user-2
content: Win7的cmd批处理bat不知道比DOS时代有没有增强，powershell也有可能。