我有几十个文件夹,其中包含多个文件,我想知道如何(或是否有可能)使用例如在文本文件中回显每个文件夹的内容,目录 > INDEX.txt使用批处理文件或命令行。
我知道执行FOR /D %A IN (X:\destinationFolder*.*) DO (DIR >> INDEX.TXT "%A\")获取父目录中的文本文件,其中列出了所有文件夹及其内容,但我可以为每个文件夹创建单独的索引吗?还是我对批处理脚本的要求太高了?
不确定这是否是关键信息,但我正在运行 Windows 10。非常感谢任何帮助。
答案1
不太确定你在这里寻找什么,但把它们放在一起比工作更有趣:
@echo off
set "dir=C:\Your\Top\Folder"
del /f /q "%dir%\index.txt"
if exist "%dir%" (
echo(
echo Report for:
echo %dir%
echo(
echo Subfolders:
dir /a:d /o:n /b "%dir%"
echo(
echo Files:
dir /a:-d /o:n /b "%dir%"
echo(
echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
)>>"%dir%\index.txt"
for /d /r "%dir%" %%A in (*) do (
echo(
echo Report for:
echo %%A
echo(
echo Subfolders:
dir /a:d /o:n /b "%%A"
echo(
echo Files:
dir /a:-d /o:n /b "%%A"
echo(
echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
)>>"%dir%\index.txt"
当然,您可以保留/丢弃/更改其中的任何部分,以使您的输出文件看起来像您想要的那样 - 所以这实际上只是为了给您一个想法。这会将变量设置dir
为您的顶级文件夹,以便我们可以更轻松地进行更改。if exist
只是为了获取dir
该顶级文件夹的输出 - 否则我们有一个for /d /r
命令将递归循环遍历它。输出布局是个人偏好,基于我发现最有吸引力的东西(不必太担心)在循环遍历几个地方后查看。您会注意到,设置变量后,dir
批处理做的第一件事是删除索引文件,这样我就不必在每次检查后手动执行此操作 - 否则>>
只会继续回显多次运行直到最后。
如果你想要一个单独的索引文件每个子文件夹,您所要做的就是启用延迟扩展并嵌套循环的主要部分,for
如下所示:
setlocal enabledelayedexpansion
for /d /r "%dir%" %%A in (*) do (
set "name=%%~nA"
(echo(
echo Report for:
echo %%A
echo(
echo Subfolders:
dir /a:d /o:n /b "%%A"
echo(
echo Files:
dir /a:-d /o:n /b "%%A"
echo(
echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)>>"%dir%\!name! index.txt"
)
%%~nA
这将为您提供一个单独的文本文件,每个文件的标题中都有文件夹的名称 ( )。如果您像我一样懒惰,想在运行此操作之前删除单独的索引文件,n第几次,你可以在循环中if exist "%dir%\!name! index.txt" del /f /q "%dir%\!name! index.txt"
设置name
变量后立即抛出一个 - 我也可以把它放在一个块中:
for /d /r "%dir%" %%A in (*) do (
set "name=%%~nA"
if exist "%dir%\!name! index.txt" del /f /q "%dir%\!name! index.txt"
(echo(
如果您正在寻找完全不同的东西,或者这是否有帮助,请告诉我。