批处理脚本获取多个子目录中所有文件的列表

Dav*_*vid 4 batch-file subdirectory

我想创建一个批处理脚本来创建目录中所有文件的列表。

到目前为止,这就是我所拥有的:

@echo off

dir c:\users\documents\* /b > filelist.txt
Run Code Online (Sandbox Code Playgroud)

只要有一个小故障就可以完美地工作。我想要获取列表的文件位于多个用户目录中,这些目录位于两个目录(AL / MZ)中。我只需为此编写两行即可轻松绕过这两个字母顺序目录。但是,我不确定如何获取子目录内的文件列表。

奖励:这是一个额外的部分,我还没有真正研究过,但我想我会把它放在那里。我将尝试让此脚本将“filelist.txt”附加到电子邮件并自动发送出去。

编辑:忘记了一个更重要的奖金问题。

这是一个非常可怜的文件结构说明。

在此输入图像描述

我希望能够有一个显示文件父目录的列表,以便它在 filelist.txt 中显示类似这样的内容:“A Name\File1.ext”

编辑:使用dir /b/s似乎列出所有子目录、文件并给出完整路径长度。有没有办法只在特定的“名称目录”中有某些内容时返回列表?所以如果除了“D Name”之外的所有内容都是空的,它只会返回

\D Name\file1.ext
\D Name\file2.ext
Run Code Online (Sandbox Code Playgroud)

Ste*_*han 5

dir没有代码可以删除部分输出。因此,您必须使用for执行删除操作的循环来解析其输出:

@echo off
setlocal enabledelayedexpansion
pushd "c:\users\documents\"
(
  for /r %%a in (*) do (
    set x=%%a
    echo !x:%cd%=!
  )
)>filelist.txt
popd
Run Code Online (Sandbox Code Playgroud)

要发送自动邮件,请参阅我们的搜索功能,该功能隐藏在本网站的右上角(请不要告诉任何人,否则我们会收到更少的重复邮件;))。

编辑I don't suppose there's anyway I can limit how far down in subdirectories this works?
哪里有意愿,哪里就有办法......

@echo off
setlocal enabledelayedexpansion
set /p lv="max Levels deep [0...n]= "
set /a lv+=2
pushd "c:\users\theo\"
(
  for /r %%a in (*.bat) do (
    set x=%%a
    set x=!x:%cd%=!
    for /f "tokens=1,%lv% delims=\" %%b in ("!x!") do if "%%c"=="" echo !x!
  )
)>filelist.txt
popd
Run Code Online (Sandbox Code Playgroud)

输入“0”表示“仅在此文件夹中,没有子文件夹”;“2”表示“在此文件夹及其子文件夹中,最大深度 = 2”

内部for检查标记“%lv%+2”(因此set /a lv+=2)是否为空。如果是,则深度小于或等于%lv%并显示字符串。如果不为空,则深度大于%lv%-无回声。