【问题标题】:Win10 CMD to export only file names from directories and subdirectoriesWin10 CMD 只导出目录和子目录中的文件名
【发布时间】:2020-05-17 21:38:24
【问题描述】:

我想用Win10 CMD解压成txt文件,只有目录和子目录的文件名。

离我最近的是

V:\Scanned Pictures>dir *.jpg /s/d/a:-d "folderpath" > test1.txt

它只列出文件名,但也包括目录的“标题”,如:

================================================================= Not wanted
 Volume in drive V is Pictures
 Volume Serial Number is C1FA-29F2

 Directory of V:\Scanned Pictures\1988-06 California trip
================================================================= Not Wanted
1988-06 California trip Kathleen Beach 1.jpg   <<<-- Just the file name

【问题讨论】:

  • 有什么理由不使用 PowerShell 并让事情变得更简单吗?
  • 谢谢!!! 我从来没有打开/使用过 PowerShell 旧时(69 岁)仅限 CMD 用户 :-)
  • 您能否通过editing your question 澄清一下您希望输出的确切外观。目前看来,除了带有多个 = 字符的行之外,您似乎想要所有内容,而您接受的答案并没有这样做。
  • 谢谢!我标记了显示“只是文件名”的行,dir 命令逐行返回正确的信息,我想要的只是文件名。

标签: cmd directory windows-10


【解决方案1】:

只需添加 /b 选项

dir *.jpg /b/s/d/a:-d "folderpath" > test1.txt

根据 dir /? 信息,/b 使 dir 显示无标题或摘要的裸格式

【讨论】:

  • 谢谢,但是 /b 与子目录一起使用时包含文件名的完整路径 复制了您的字符串,这里有几行:V:\Scanned Pictures\1988-06 California旅行\1988-06 加利福尼亚旅行凯瑟琳海滩 1.jpg V:\扫描图片\1988-06 加利福尼亚旅行\1988-06 加利福尼亚旅行凯瑟琳海滩.jpg V:\扫描图片\1988-06 加利福尼亚旅行\1988-06 加利福尼亚旅行凯瑟琳·帕特里夏.jpg
【解决方案2】:

我找到了一个两部分的解决方案。

dir *.jpg /s/b/a-d > test.txt - 生成一个仅列出路径和文件名的文件 将内容复制到 Excel Excel 查找/替换 *\ 为 null - 删除路径

  • 我的原始问题中未列出额外步骤 数据文本到列以分隔从文件名中获取的日期

感谢大家的建议和意见,您让我走上了寻找解决方案的道路。

谢谢,注意安全!

【讨论】:

  • 虽然这可能说明您已经解决了您的问题,但这并不是对已发布问题的回答。我已对我的答案进行了编辑,以包括删除 folderpath 字符串所需的更改,这显然是不需要的。
【解决方案3】:

有很多选项可以满足您的要求,这里只是其中的一部分:

如果您想要与问题中完全相同的格式,但删除了无文件名行,则只需使用 删除不需要的行。

您可以通过省略以空格开头的行来做到这一点,(假设您没有以空格字符开头的文件名)

Dir /S/D/A:-D "folderpath\*.jpg" 2>NUL|%__AppDir__%findstr.exe /VBC:" ">"test1.txt"

如果您想进一步删除空行,请将其通过另一个

Dir /S/D/A:-D "folderpath\*.jpg" 2>NUL|%__AppDir__%findstr.exe /VBC:" "|%__AppDir__%findstr.exe /V "^$">"test1.txt"


如果您不需要宽列排序格式,但仍只需要文件名,那么您可以使用
%__AppDir__%forfiles.exe /P "folderpath" /M "*.jpg" /S /C "%__AppDir__%cmd.exe /D/Q/C If @IsDir==FALSE Echo @File">"test1.txt"

如果您不希望它们被双引号括起来,那么您可以进一步扩展它来做到这一点:

%__AppDir__%forfiles.exe /P "folderpath" /M "*.jpg" /S /C "%__AppDir__%cmd.exe /D/Q/C If @IsDir==FALSE For /F \"Delims=\" %G In (@File)Do Echo %~G">"test1.txt"

虽然 是一个相对低效的命令,而且你现在使用的是,但你可以直接使用

(For /F "Delims=" %G In ('Dir /B/S/A-D "folderpath\*.jpg" 2^>NUL')Do @Echo %~nxG)>"test1.txt"

如果您想确保仅输出文件扩展名为 .jpg 的文件,(与那些以 .jpg 开头的文件相反,如使用 命令),那么您也可以改用 命令。

(For /F "Delims=" %G In ('%__AppDir__%where.exe /R "folderpath" *.jpg 2^>NUL')Do @Echo %~nxG)>"test1.txt"


[编辑 /]

以下示例已包含在您发布的答案中,这表明 folderpath 不是必需的,因为您正在当前目录中工作。我没有重新复制文字,只是按相同顺序的代码示例:

Dir /S/D/A:-D *.jpg 2>NUL|%__AppDir__%findstr.exe /VBC:" ">"test1.txt"
Dir /S/D/A:-D *.jpg 2>NUL|%__AppDir__%findstr.exe /VBC:" "|%__AppDir__%findstr.exe /V "^$">"test1.txt"
%__AppDir__%forfiles.exe /M *.jpg /S /C "%__AppDir__%cmd.exe /D/Q/C If @IsDir==FALSE Echo @File">"test1.txt"
%__AppDir__%forfiles.exe /M *.jpg /S /C "%__AppDir__%cmd.exe /D/Q/C If @IsDir==FALSE For /F \"Delims=\" %G In (@File)Do Echo %~G">"test1.txt"
(For /F "Delims=" %G In ('Dir /B/S/A-D *.jpg 2^>NUL')Do @Echo %~nxG)>"test1.txt"
(For /F "Delims=" %G In ('%__AppDir__%where.exe /R . *.jpg 2^>NUL')Do @Echo %~nxG)>"test1.txt"

【讨论】:

  • 感谢您的建议。我运行了第一个导致 0 字节的 text1.txt 我尝试了其他几个相同的结果。语法错误?我试图推断,但我不够聪明,无法解开它。再次感谢!
  • @tom,我无法控制您使用什么来代替 folderpath,或者取决于您是用完整位置还是相对位置替换它,您当前的目录在什么位置运行。但是,我可以向您保证,如果您只更改了该字符串而没有更改其他内容,(甚至不包括其周围的双引号),并且在您运行命令行时,文件夹路径的位置可用,(根据上述),并在其树中的某个位置包含至少一个带有.jpg 扩展名的文件,它们将起作用。我上面发布的任何代码都没有语法错误。
  • 从您发布的@tom 示例中,您有一个标有Pictures 的卷,它被分配了驱动器号V: 在该驱动器的根目录中,有一个名为@ 的目录987654348@,这是您提供的命令行中的当前目录。然后,您提供的命令使用 folderpath,它只能是一个虚构的名称,因为提供的输出清除显示没有名为 folderpath 的目录。为了获得您提供的输出,您必须将folderpath 替换为1988-06 California tripV:\Scanned Pictures。所以要让它发挥作用,复制这些东西。
  • Compo - 感谢您的帮助和解释。非常有助于制定解决方案。
  • @tom,您的最后一条评论尚未验证我的代码确实有效。此外,如果您对目前提供的任何答案都是可以接受的解决方案感到满意,则应将首选答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2011-06-09
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多