用于在Windows中递归列出目录的批处理文件,如在linux

时间:2016-02-22 17:54:34

标签: windows batch-file

我想创建一个批处理文件,该文件在 Windows 中以递归方式列出目录,但是采用类似linux的格式。例如,请考虑以下批处理文件:

@echo off
tree /f /a C:\Windows\Boot\dvd>%userprofile%\desktop\tree_output.txt
exit

此批处理文件将树命令的输出回显或保存在用户桌面文件夹中名为tree_output.txt的文本文件中(/ f参数列出了子目录中的所有文件,并且/ a参数显示以ASCII文本格式输出的树命令,而不是图形格式。 tree_output.txt包含以下输出:

Folder PATH listing for volume System
Volume serial number is 4E00004E 545D:650E
C:\WINDOWS\BOOT\DVD
+---EFI
|   |   BCD
|   |   boot.sdi
|   |   
|   \---en-US
|           efisys.bin
|           efisys_noprompt.bin
|           
\---PCAT
     |   BCD
     |   boot.sdi
     |   etfsboot.com
     |   
     \---en-US
           | bootfix.bin

然而, linux 中的 ls -R 命令会以递归的方式列出目录:

C:\WINDOWS\BOOT\DVD\
C:\WINDOWS\BOOT\DVD\EFI
C:\WINDOWS\BOOT\DVD\EFI\BCD
C:\WINDOWS\BOOT\DVD\EFI\boot.sdi
C:\WINDOWS\BOOT\DVD\EFI\en-US
C:\WINDOWS\BOOT\DVD\EFI\en-US\efisys_noprompt.bin
C:\WINDOWS\BOOT\DVD\PCAT
C:\WINDOWS\BOOT\DVD\PCAT\BCD
C:\WINDOWS\BOOT\DVD\PCAT\boot.sdi
C:\WINDOWS\BOOT\DVD\PCAT\etfsboot.com
C:\WINDOWS\BOOT\DVD\PCAT\en-US
C:\WINDOWS\BOOT\DVD\PCAT\en-US\bootfix.bin

有没有办法通过创建批处理文件在Windows中的文本文件中获取上述输出?到目前为止我尝试做的事情可以概括为:

  • 使用 for 命令检查上述批处理文件创建的文本文件,以检查是否存在\字符以识别目录(如输出文本文件中所示)以及 findstr 命令。此方法失败的部分原因是目录的根目录中正在执行树的目录(在本例中为C:\ WINDOWS \ BOOT \ DVD \)由 + 字符标识(如您所见)在输出文本文件中)。

到目前为止我所理解的是,使用任何带有cmd参数或参数的内置命令都无法实现这一点。我想解决这个问题的方法是先在批处理文件中使用 tree / f / a 命令获取树,然后使用任何其他批处理文件或甚至 c ++程序对其进行排序获取输出,如 linux

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找

find . -name '*.html' -not -name '*.bin*'

dir /a:d /s /b /o:n 用于递归,/s用于裸格式,因此没有文件大小等,/b仅用于显示目录,/a:d用于排序名。

答案 1 :(得分:0)

尝试Dir / s / b / ad

是子目录裸和目录属性