我在尝试以递归方式获取文件名(没有扩展名或文件路径)时遇到了一个小问题。这对我在根文件夹中有效:
dir /b
但是当我添加 /s 进行递归扫描时,我也得到了不需要的文件名之前的文件路径。有没有办法从目录中的所有子文件夹中获取裸文件名?
我在 Windows 7 x64 上,我宁愿使用常规命令提示符而不是 PS 或 VBS
答案1
使用以下命令:
dir /b /a /s
- /b从输出中删除日期和其他详细信息
- /A仅输出文件名,不输出路径
- /秒启用递归目录列表
如果需要将输出保存到文件,可以使用:
dir /b /a /s >> list_of_names.txt
编辑实际上,上述解决方案并未达到原始问题的目标。我从问题中注意到的一件事是,帖子要求递归列表。而另一个答案则没有,所以我认为在其他回答者的答案中添加“/s”就可以了
for /f %a in ('dir /b /s') do @echo %~na
答案2
尝试这个:
for /f "delims=" %a in ('dir /b /s') do @echo %~na
有关如何工作以及它正在做什么的更多信息,请输入for /?
答案3
for /r %i in (*) do @echo %~ni
或者
forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"
假设noquotes.bat
你的%小路%有此内容
@echo %~1
/r 方法解释
for /r
递归遍历当前目录(您可以指定一个目录for /r drive:\path\
,假定为当前目录)并对集合中匹配的每个文件执行 do 指定的命令(*)
。该集合(.)
将仅匹配目录。@echo %~ni 此命令在提示符下按原样运行。如果您将其放在批处理文件中,请将引号加倍。即for /r %%i in (*) do @echo %%~ni
forfiles 方法解释
/s
枚举当前目录和所有子目录
/c
执行引号内的命令
@isdir
,并且@fname
是发出到命令字符串中的符号
额外的批处理文件noquotes.bat
通过使用 %~1 (参数 1) 删除双引号来提供帮助,
forfiles
还允许您指定要从哪里开始的路径forfiles /P C:\Windows ...
答案4
使用属性(非目录)递归列出所有文件(仅限文件)
目录/B/S/A:-D
C:\test\cache>dir /B /S /A:-D
C:\test\cache\7\0f\7b50ed0522645513da90345120eaf0f7 C:\test\cache\d\23\814644aa6a8195c91e54d2f7bb64e23d