如何限制DIR / S的深度?

时间:2019-03-26 18:27:38

标签: batch-file

我正在搜索文件并将其附加到txt文件,我想将子目录中的搜索限制为向下一级而不是多层子目录。

此刻我的代码看起来像这样。

set ProjectNo=12345
set ProjectLocation=E:\Projects\123 BSI\45 Bukit \G Model 12345\02 Models
set location=E:\Scripts

dir /S/B "%ProjectLocation%\\..\\%ProjectNo%-*-MDL-??-???.dwg" > %location%\%ProjectNo%-ML-%DATE%.txt

列表很长,但部分输出如下:

E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\GE\12345-30-MDL-GE-003.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-25-MDL-ME-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-30-MDL-ME-017.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-25-MDL-ME-018\Details\12345-25-MDL-ME-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\_Superseded\12345-120-MDL-ME-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\PP\12345-25-MDL-PP-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-ST-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-ST-002.dwg

任何想法都是只列出"E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\"的一个深度

预期结果如下所示:

E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\GE\12345-30-MDL-GG-003.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-25-MDL-KK-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-30-MDL-MM-017.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\PP\12345-25-MDL-PP-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-SS-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-CC-002.dwg

任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用FOR /D命令在源目录的根目录中列出所有目录。然后,使用另一个FOR命令在源的单个子目录中列出所需的文件。

@echo off
set "ProjectNo=12345"
set "ProjectLocation=E:\Projects\123 BSI\45 Bukit\G Model 12345\02 Models"
set "location=E:\Scripts"

(FOR /D %%G IN ("%ProjectLocation%\*") DO (
    FOR %%H IN ("%%~G\%ProjectNo%-*-MDL-??-???.dwg") DO echo %%H
)
)>"%location%\%ProjectNo%-ML-%DATE%.txt"

我所做的所有代码更改都是您应遵循的最佳实践。报价是可选的,但如果路径中有空格,则需要报价。

在这种情况下,使用重定向将输出文件打开一次以进行写入。如果您在FOR命令中进行了重定向,则每次执行ECHO命令时,它将打开和关闭文件。