经过这么长时间(5 年),我刚刚偶然发现了一个简单的命令行,它一直可用。 ROBOCOPY 自 Vista 以来一直是标准的 Windows 实用程序,可通过 Windows 资源工具包在 XP 中使用。
robocopy . . /l /s /njh /njs /ns /lev:4 >c:\temp\dir_list.txt
说明
/L :: List only - don't copy, timestamp or delete any files.
/S :: copy Subdirectories, but not empty ones.
/NJH :: No Job Header.
/NJS :: No Job Summary.
/NS :: No Size - don't log file sizes.
/LEV:n :: only copy the top n LEVels of the source directory tree.
/lev:n 选项在计数中包含根目录,并且您需要 3 个子目录级别,这就是我将值加 1 的原因。
进一步处理
输出并不完美,因为根文件夹包含在输出中,并且每个路径都包含固定宽度的前导空格。您可以使用FOR /F 方便地消除根路径以及前导空格。
(for /f "skip=2 tokens=*" %A in ('robocopy . . /l /s /njh /njs /ns /lev:4') do @echo %A) >c:\temp\dir_list.txt
ROBOCOPY 输出包含一个初始空白行,这就是为什么skip 必须是 2 而不是 1。
每条路径都以\ 结尾。我喜欢这个功能,因为它很明显我们列出的是文件夹而不是文件。如果你真的想去掉后面的\,那么你可以多加一个FOR。
(for /f "skip=2 tokens=*" %A in ('robocopy . . /l /s /njh /njs /ns /lev:4') do @for %B in ("%A.") do @echo %~fB) >c:\temp\dir_list.txt
但是输入命令变得有点笨拙。将这种技术合并到以根路径和级别作为参数的实用程序批处理文件中应该很容易。如果将命令放在批处理脚本中,则必须记住将百分比加倍。