Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何限制DIR/S的深度?_Batch File - Fatal编程技术网

Batch file 如何限制DIR/S的深度?

Batch file 如何限制DIR/S的深度?,batch-file,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" > %lo

我正在搜索文件并将其附加到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\”

预期结果如下所示:

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

有什么想法可以实现吗?

您可以使用
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
命令时,它都会打开和关闭文件。

目录名不能以空格结尾:
\45 Bukit\
Hi Squashman,感谢您的快速回复。我得到的输出如下所示:E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\PP E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST,如文章中所述,我们的想法是获得如下输出:E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-CC-002.dwgSquashman,请编辑您的代码。第二个而不是“Do echo%%~G”应该是“Do echo%%H”,以获得我需要的输出。编辑完成后,我会将你的答案标记为正确答案!非常感谢你的努力!我记不起新成员是否有按钮。您可以随时建议编辑。我想如果我批准的话,你会因此获得徽章。我必须至少添加6个字符的文本,但你的编辑是对的!再次感谢!
@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"