获取目录中嵌套文件夹的列表并在批处理脚本中按名称过滤

问题描述 投票:0回答:1

我正在尝试编写一个批处理函数,在目录中搜索时需要排除一些文件夹

Main Folder
  --ProjA Folder
     --A Folder
       --A.csproj
      --Aa Folder
        -Aa.csproj
     -- B Folder
      --B.csproj
     -- C Folder
       --c.csproj

当我尝试使用此功能时,它为我提供了所有嵌套子文件夹中的项目文件名。

Set MainDir="C:\users\Main"
 cd %MainDir%
for /f "delims=" %%x in ('dir /s /b *.csproj') do if exist %%x (

    echo %%~dpx
)

但是我需要排除B文件夹相关的B.csproj文件。请让我知道我们如何为这个特定的子文件夹应用过滤器

for-loop batch-file
1个回答
0
投票

[仅限理论]

Set "MainDir=C:\users\Main"
cd %MainDir%
for /f "delims=" %%e in ('dir /s /b *.csproj^|find /i /v "\ProjA Folder\B Folder\"') do if exist "%%e" (

    echo %%~dpe
)

备注:
使用

set "var=value"
设置字符串值 - 这可以避免尾随空格引起的问题。不要分配
"
或终端反斜杠或空格。从元素构建路径名 - 与直觉相反,它可能会使过程变得更容易。如果使用语法
set var="value"
,则引号将成为分配值的一部分。

metavariable
%%x
更改为
%%e
,因为
x
也是
metavariable modifier
(请参阅提示中的
for /?
),这可能会导致难以发现的问题。

if exist
中引用元变量,以便正确处理包含空格的文件名。

使用

^|
(转义管道)过滤
dir
的输出,使用
find
报告 not (
/v
) 包含不区分大小写 (
/i
) 字符串
"\ProjA Folder\B Folder\"
的文件名。

您的代码应报告遇到的与文件掩码匹配的每个文件的驱动器和路径

*.csproj

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.