我正在尝试编写一个批处理函数,在目录中搜索时需要排除一些文件夹
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文件。请让我知道我们如何为这个特定的子文件夹应用过滤器
[仅限理论]
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