我希望你能在这里拯救我的理智。我被要求生成一份报告,显示 Windows 服务器上的所有文件和文件夹。不是你会认为有问题 - dir /s > report.txt 你做对了吗?
Wrong.
我被告知报告必须按级别排列,而不是遵循文件夹结构。解释。想象一下我们有一个这样布局的服务器 -
E:
├───Animals
│ ├───Birds
│ ├───Mammals
│ └───Reptiles
├───Cities
│ └───Continents
│ ├───Africa
│ ├───Europe
│ └───North America
└───Plants
├───Flowers
├───Grasses
└───Trees
Dir /s 会产生 -
Directory of E:
23/11/2017 11:57 <DIR> .
23/11/2017 11:57 <DIR> ..
23/11/2017 11:46 <DIR> Animals
23/11/2017 11:51 <DIR> Cities
23/11/2017 11:52 <DIR> Plants
0 File(s) 0 bytes
Directory of E:\Animals
23/11/2017 11:46 <DIR> .
23/11/2017 11:46 <DIR> ..
23/11/2017 11:47 <DIR> Birds
23/11/2017 11:49 <DIR> Mammals
23/11/2017 11:50 <DIR> Reptiles
0 File(s) 0 bytes
Directory of E:\Animals\Birds
23/11/2017 11:47 <DIR> .
23/11/2017 11:47 <DIR> ..
23/11/2017 11:47 0 Duck.txt
23/11/2017 11:47 0 Ostrich.txt
23/11/2017 11:47 0 Pigeon.txt
3 File(s) 0 bytes
Directory of E:\Animals\Mammals
23/11/2017 11:49 <DIR> .
23/11/2017 11:49 <DIR> ..
23/11/2017 11:48 0 Aardvark.txt
23/11/2017 11:48 0 cat.txt
23/11/2017 11:48 0 dog.txt
3 File(s) 0 bytes
Directory of E:\Animals\Reptiles
23/11/2017 11:50 <DIR> .
23/11/2017 11:50 <DIR> ..
23/11/2017 11:49 0 Iguana.txt
23/11/2017 11:50 0 Sand Lizard.txt
2 File(s) 0 bytes
等等
但他们想要——
Directory of E:
23/11/2017 11:57 <DIR> .
23/11/2017 11:57 <DIR> ..
23/11/2017 11:46 <DIR> Animals
23/11/2017 11:51 <DIR> Cities
23/11/2017 11:52 <DIR> Plants
0 File(s) 0 bytes
Directory of E:\Animals
23/11/2017 11:46 <DIR> .
23/11/2017 11:46 <DIR> ..
23/11/2017 11:47 <DIR> Birds
23/11/2017 11:49 <DIR> Mammals
23/11/2017 11:50 <DIR> Reptiles
0 File(s) 0 bytes
Directory of E:\Cities
23/11/2017 11:51 <DIR> .
23/11/2017 11:51 <DIR> ..
23/11/2017 11:51 <DIR> Continents
0 File(s) 0 bytes
Directory of E:\Plants
23/11/2017 11:52 <DIR> .
23/11/2017 11:52 <DIR> ..
23/11/2017 11:51 <DIR> Flowers
23/11/2017 11:51 <DIR> Grasses
23/11/2017 11:51 <DIR> Trees
0 File(s) 0 bytes
etc...
我被告知要手动列出 Windows 资源管理器中的每个文件夹,然后将每个文件夹丝网打印到 Word 文档中。
我的意思是什么!???有超过 14,000 个文件夹!我做了什么值得这样的事?!我是在夜里死去而没有注意到吗?地狱不是应该充满火焰和拿着干草叉四处游荡的家伙吗?
我对 Windows 命令行不太熟悉,但相信有 for 循环?使用其中一个并以某种方式循环遍历各个级别是否可以成为一种解决方案?有解决办法吗? (哦,我多么希望有一个解决方案!)。
请有人将我从永恒的丝网印刷地狱中拯救出来!
-Edit 1-
我一直在命令行上阅读各种网页,虽然我仍然不理解 For /f 命令,但我遇到了 popd 和 Pushd,它们允许您将当前目录存储在虚拟堆栈上。由于我的问题是我需要以某种方式修改 dir 命令的行为,以便它按级别列出文件夹,而不是遵循明显的文件夹结构,我想知道是否有任何方法可以使用 Pushd 和 popd 来执行此操作?
使用 dir 命令使我能够将文件删除,留下目录列表(dir *./s /b),但这仍然尝试遵循结构,在我的示例 dir * 中。 /s /b 给出 -
E:\动物
E:\城市
E:\植物
E:\动物\鸟类
E:\动物\哺乳动物
E:\动物\爬行动物
E:\城市\大陆
E:\城市\大陆\非洲
E:\城市\大陆\欧洲
E:\城市\大陆\北美
E:\植物\花卉
E:\植物\草
E:\植物\树木
我需要以某种方式获得具有相同级别数分组的所有目录 - 因此将 E:\plants\xxxx 的目录移动到 E:\Cities\Continents 下面。我不知道我是否更接近解决方案,对 dir /s /b 的输出进行排序不起作用,因此看起来我必须以某种方式解析 dir /s /b 的输出。
-编辑2-
如果我用高级语言(而不是批处理文件)执行此操作,我会获取 dir /s /b 的输出并将变量 -say x - 设置为 1。然后我会运行 dir 输出并将其中包含 x \ 的所有行复制到新文件中。在 eof 处,我会增加 x 并再次运行该文件(这次 x 为 2,它将选出所有包含 2 \ 的行)。我将继续这样做,直到没有行中有 x \'s,这将为我提供一个具有所需顺序的文件。然后,我将运行新文件,为每个条目执行一个简单的目录。
问题是我不知道如何在批处理文件中执行上述操作 - 或者即使它可能并且我无法访问该项目的高级语言。我什至认为他们不会让我使用 Word vb,自从我进行任何 Visual Basic 编程以来,多年来一直如此。