批处理文件以递归方式在 Windows 中列出目录,就像在 linux 中一样

use*_*716 3 windows batch-file

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

@echo off
tree /f /a C:\Windows\Boot\dvd>%userprofile%\desktop\tree_output.txt
exit
Run Code Online (Sandbox Code Playgroud)

此批处理文件将 tree 命令的输出回显或保存在用户桌面文件夹中名为 tree_output.txt 的文本文件中(/f 参数也列出子目录中的所有文件,/a 参数以 ASCII 格式显示 tree 命令的输出文本格式而不是图形格式)。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
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

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

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

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