Batch file 如何将目录树列表写入文本文件?

Batch file 如何将目录树列表写入文本文件?,batch-file,Batch File,我想创建一个批处理文件。当它作为batch.bat MyProject或batch.bat MyProject/调用时,它将生成以下列表。请注意,Dir是MyProject的子目录。我正在使用Windows7 Dir Dir/SubDir1 Dir/SubDir1/SubSubDir1 Dir/SubDir1/SubSubDir2 Dir/SubDir2 Dir/SubDir2/SubSubDir1 Dir/SubDir2/SubSubDir2 Dir/SubDir2/SubSubDir3 Di

我想创建一个批处理文件。当它作为
batch.bat MyProject
batch.bat MyProject/
调用时,它将生成以下列表。请注意,
Dir
MyProject
的子目录。我正在使用Windows7

Dir
Dir/SubDir1
Dir/SubDir1/SubSubDir1
Dir/SubDir1/SubSubDir2
Dir/SubDir2
Dir/SubDir2/SubSubDir1
Dir/SubDir2/SubSubDir2
Dir/SubDir2/SubSubDir3
Dir/SubDir3
Dir/SubDir4
如何将目录树列表写入文本文件


必须排除文件名。

确定-这样就可以了。它接受一个参数(根文件夹)

您可以通过将结果重定向到批处理文件来执行它:

PrintDirectoryStructure.bat c:\MyProject > out.txt

好的-这个应该可以。它接受一个参数(根文件夹)

您可以通过将结果重定向到批处理文件来执行它:

PrintDirectoryStructure.bat c:\MyProject > out.txt

FORFILES提供了一个简单的解决方案,但速度很慢。该命令在批处理文件中或在命令行中同样有效:

forfiles /s /p "c:\MyProject" /m * /c "cmd /v:on /c if @isdir==TRUE (set f=@relpath&echo !f:~3,-1!)" >listing.txt
如果以MyProject作为当前目录运行该命令,则可以从该命令中删除
/p“c:\MyProject”
选项

如果您不介意将相对路径用引号括起来,并在每个路径前面加上
\
,那么解决方案就更简单了:

forfiles /s /p "c:\MyProject" /m * /c "cmd /c if @isdir==TRUE echo @relpath" >listing.txt

FORFILES提供了一个简单的解决方案,但速度很慢。该命令在批处理文件中或在命令行中同样有效:

forfiles /s /p "c:\MyProject" /m * /c "cmd /v:on /c if @isdir==TRUE (set f=@relpath&echo !f:~3,-1!)" >listing.txt
如果以MyProject作为当前目录运行该命令,则可以从该命令中删除
/p“c:\MyProject”
选项

如果您不介意将相对路径用引号括起来,并在每个路径前面加上
\
,那么解决方案就更简单了:

forfiles /s /p "c:\MyProject" /m * /c "cmd /c if @isdir==TRUE echo @relpath" >listing.txt


这必须成批完成吗?例如,在Powershell中,这将非常简单,但在批处理中则非常困难。是的。在批处理文件中,仅为了简单性和兼容性。您能够调用VBScript吗?同样,这将使事情变得简单得多…@RB.:我将避免使用.bat以外的命令。:-)很公平-那么我已经发布了一个有效的答案,但我认为它不能满足您的“简单性”要求;-)我强烈建议您为此使用VBScript、PowerShell或类似工具:)是否必须成批完成?例如,在Powershell中,这将非常简单,但在批处理中则非常困难。是的。在批处理文件中,仅为了简单性和兼容性。您能够调用VBScript吗?同样,这将使事情变得简单得多…@RB.:我将避免使用.bat以外的命令。:-)很公平-那么我已经发布了一个有效的答案,但我认为它不能满足您的“简单性”要求;-)我强烈建议您为此使用VBScript、PowerShell或类似工具:)我已经对其进行了测试,但缺少一些路径。你测试过了吗?@GarbageCollector我发现了一个bug,如果路径中有空格,它会导致问题。现在已经更正了(注意我添加的
“tokens=*”
文本)。这对你有用吗?如果没有,,请提供有关您没有看到的文件夹的详细信息…当我在
c:\users\Garbage Collector\
中时,调用
PrintDirectoryStructure.bat downloads>output.txt
,即使我的
downloads
包含许多目录,也只生成一个项目的
output.txt
。@GarbageCollector我只测试过它其中输入是一条没有任何空格的绝对路径,对于这种情况,它可以正常工作。恐怕你的任何要求都会留给读者作为练习。我发布的内容应该足以让你的脚本按你想要的方式运行。我已经测试过了,但缺少一些路径。你测试过了吗?@GarbageCollector我发现了一个bug,如果路径中有空格,它会导致问题。现在已经更正了(注意我添加的
“tokens=*”
文本)。这对你有用吗?如果没有,,请提供有关您没有看到的文件夹的详细信息…当我在
c:\users\Garbage Collector\
中时,调用
PrintDirectoryStructure.bat downloads>output.txt
,即使我的
downloads
包含许多目录,也只生成一个项目的
output.txt
。@GarbageCollector我只测试过它其中输入是一条没有任何空格的绝对路径,对于这种情况,它可以正常工作。恐怕你的任何要求都会留给读者作为练习。我发布的内容应该足以让您的脚本按您希望的方式运行。值得注意的是,在当前版本中,它将
listing.txt
放入用户主目录(即Windows 7中的
C:\Users\[username]
,可能还有其他版本)。我非常惊讶,因为我首先在
c:
和文件夹中查找
listing.txt
,我想转储它的结构。@trejder-如前所述,它将在控制台的当前目录中创建文件。您可以在重定向中包含路径,也可以在重定向FORFILES命令之前使用CD或PUSHD。值得注意的是,在当前版本中,它将
listing.txt
放入用户主目录(即Windows 7中的
C:\Users\[username]
,可能还有其他版本)。我非常惊讶,因为我首先在
c:
和文件夹中查找
listing.txt
,我想转储它的结构。@trejder-如前所述,它将在控制台的当前目录中创建文件。您可以在重定向中包含路径,也可以在重定向的FORFILES命令之前使用CD或PUSHD。