批量列出文件夹和子文件夹以分隔列表

时间:2017-09-08 14:38:34

标签: batch-file directory

我有一个根文件夹" ROOT" 里面有一个带日期的文件夹,每个文件夹都有子文件夹 我想获得每个文件夹的列表,其中包含子文件夹的名称但没有路径,保存到txt文件到csv,但文件的名称将是文件夹名称。例如,如果文件夹是" 1.1" " 2.1"并且里面的子文件夹是" sub1,sub2和co 我有一个名为1.1.txt的文本文件,包含sub1,sub2,2.1.txt等等 文件夹结构内部就像这样

1.1

  • 子文件夹1a
  • Sub folder2a

2.1

1.Sub folder1b

1.Sub folder2b

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

for %%G in (.) do set curpath=%%~nxG
dir /b /s /a:d >%curpath%.txt

所以我得到一个文件,其中包含当前文件夹名称和所有子文件夹,但带有我不想要的路径。 而且我也不想在一个文件中我想知道每个文件夹中的确切子文件夹。 考虑以某种方式保存它以使用每个文件夹中的文件夹列进行优秀是真正的帮助,这是我真正需要的

1 个答案:

答案 0 :(得分:1)

:: Q:\Test\2017\09\08\SO_46118986.cmd
@Echo off 

CD /D A:\Root

for /R %%A in (.) Do (
    PushD  "%%A"
    Del "%%~nxA.txt" >Nul 2>&1
    For /F "delims=" %%B in (
        'Dir /B/AD 2^>Nul ^|Find /V ""'
    ) Do Echo:%%~nxB >>"%%~nxA.txt"
    PopD
)
    带有单个点For /r
  • (.)枚举所有(子)目录。请参阅for /?或阅读for /r
  • Pushd/Popd进入目录并在堆栈上存储位置/恢复以前的位置。
  • 由于dir附加到文件,我们必须确保它为空,否则它会在成功运行时增长。所以首先删除该文件。如果文件不存在且此命令的正常输出,则>NUL 2>&1会抑制可能的错误消息。
  • For /f with(' command')解析命令的输出。请参阅for /?或阅读for /f
  • "delims="将导致默认分隔符空间无分裂。

模拟树结构上的示例输出:

> tree . /F
ROOT
│   root.txt
│
├───1.1
│   │   1.1.txt
│   │
│   ├───Sub folder 1a
│   └───Sub folder 2a
└───2.1
    │   2.1.txt
    │
    ├───Sub folder 1b
    └───Sub folder 2b

> for /r %A in (*.txt) Do type %A
> type .\root\root.txt
1.1
2.1

> type .\root\1.1\1.1.txt
Sub folder 1a
Sub folder 2a

> type .\root\2.1\2.1.txt
Sub folder 1b
Sub folder 2b