在命令提示符下递归获取裸文件名


16

我遇到了一个小问题试图只递归地获取文件名(没有扩展名或文件路径)。这在根文件夹中对我有用:

dir /b

但是当我添加/ s以递归方式扫描时,我还在文件名之前获得了文件路径,这是我不想要的。有没有办法从目录中的所有子文件夹中获取裸文件名?

我在Windows 7 x64上我宁愿使用常规命令提示符而不是PS或VBS

Answers:


13

使用以下命令:

dir /b /a /s
  • / b从输出中删除日期和其他详细信息
  • / a只输出文件名,没有路径
  • / s启用递归目录列表

如果需要将输出保存到文件,可以使用:

dir /b /a /s >> list_of_names.txt

编辑实际上,上述解决方案没有达到原始问题的目标。我从问题中注意到的一件事是帖子要求递归列表。另一个答案缺乏,所以我认为在另一个回答者的答案中添加“/ s”就可以了

for /f %a in ('dir /b /s') do @echo %~na

你能解释一下吗?对我来说没什么意义。
Simon Sheehan

4
这不起作用,/ a不起作用 - 它是一个过滤器,用于列出要列出的文件类型。在执行递归目录列表时,它不会从文件名中删除路径。
加夫

编辑了答案; 然后再次把手放在一个窗户盒子上,我想这次应该这样做(win732bit)
Nik所以

5

试试这个:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

键入有关如何工作以及它正在做什么的更多信息 for /?


这几乎可以工作,但是有一个很大的问题。它只输出文件名的第一个单词。如果文件名是例如“我的假期图像1”那么它只输出“我的”
TMRW 2011年

试试这个:for / f“delims = |” ('dir / b')中的%a执行@echo%~na。默认情况下,FOR的/ f参数将在空格上进行标记。将令牌设置为不应出现在文件/目录名称中的字符将为您提供包括空格在内的完整名称。
Scott McKinney

2
for /r %i in (*) do @echo %~ni

要么

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

假设文件noquotes.bat在您%PATH%与此内容

@echo %~1

for / 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 ...


@DavidPostill是的,这是一个糟糕的答案。感谢您的意见。如果我能进一步改进我的答案,请告诉我。
JJS 2016年

@DavidPostill你没有以前的答案或评论。你是在调节问题,还是寻找答案,偶然发现我的劣质答案?
JJS 2016年

您的答案会弹出“低质量帖子”审核队列。正如我对批处理文件了解的很多,我接近了它。
DavidPostill

@DavidPostill感谢您的评论。我欢迎您审核我对我的回答所做的更改。
JJS 2016年

好多了...... :)
DavidPostill

-1

列出所有文件,裸,递归,使用属性(不是目录)(仅限文件)

dir / B / S / A:-D

C:\ test \ cache> dir / B / S / A:-D

C:\ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C:\ test \ cache \ d \ 23 \ 814644aa6a8195c91e54d2f7bb64e23d


问题是OP是“试图只获取文件名(没有扩展名或文件路径)。...但是当我[尝试dir /b /s]递归扫描时,我也在文件名之前获得了文件路径,这是我不想要的。“所以,你告诉OP尝试对他们已经尝试过的内容进行微不足道的修改,你的答案就会证明它会产生与OP尝试时相同的结果(即,不是他们想要的)。
斯科特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.