You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CAML查询从含特殊字符(%)的SharePoint文件夹中检索文件

SharePoint中使用CAML查询检索含特殊字符文件夹下的所有文件

核心问题处理:特殊字符转义

你的文件夹名称包含%,这在CAML中属于转义字符,必须将%替换为%25才能正确匹配。原文件夹名(ABC%ABC)需要转写为(ABC%25ABC)。

完整CAML查询示例

假设目标文件夹的服务器相对路径为/sites/YourSite/Shared Documents/(ABC%25ABC),以下CAML会筛选出该文件夹下的所有文件(排除子文件夹):

<View>
  <Query>
    <Where>
      <And>
        <!-- 筛选文件:FSObjType=0 代表文件,=1 代表文件夹 -->
        <Eq>
          <FieldRef Name="FSObjType" />
          <Value Type="Integer">0</Value>
        </Eq>
        <!-- 匹配文件所在的文件夹路径 -->
        <Eq>
          <FieldRef Name="FileDirRef" />
          <Value Type="Text">/sites/YourSite/Shared Documents/(ABC%25ABC)</Value>
        </Eq>
      </And>
    </Where>
  </Query>
  <!-- 可选:指定要返回的字段 -->
  <ViewFields>
    <FieldRef Name="FileLeafRef" />
    <FieldRef Name="Created" />
    <FieldRef Name="Modified" />
  </ViewFields>
</View>

代码实现示例(SSOM)

为避免手动转义出错,建议通过SharePoint对象模型先获取文件夹的服务器相对路径,再代入查询:

using (SPSite site = new SPSite("http://your-sharepoint-site-url"))
{
    using (SPWeb web = site.OpenWeb())
    {
        // 获取目标文件夹(直接用原名称,SP对象会自动处理转义)
        SPFolder targetFolder = web.GetFolder("/sites/YourSite/Shared Documents/(ABC%ABC)");
        if (!targetFolder.Exists)
        {
            Console.WriteLine("目标文件夹不存在");
            return;
        }

        SPList docLib = web.Lists.TryGetList("Shared Documents");
        if (docLib == null)
        {
            Console.WriteLine("文档库不存在");
            return;
        }

        // 构建CAML查询
        SPQuery query = new SPQuery();
        query.Query = $@"
<View>
  <Query>
    <Where>
      <And>
        <Eq>
          <FieldRef Name='FSObjType' />
          <Value Type='Integer'>0</Value>
        </Eq>
        <Eq>
          <FieldRef Name='FileDirRef' />
          <Value Type='Text'>{targetFolder.ServerRelativeUrl}</Value>
        </Eq>
      </And>
    </Where>
  </Query>
</View>";

        SPListItemCollection files = docLib.GetItems(query);
        foreach (SPListItem file in files)
        {
            Console.WriteLine($"文件:{file["FileLeafRef"]} | 最后修改:{file["Modified"]}");
        }
    }
}

注意事项

  • 确保执行查询的账号拥有目标文件夹和文档库的读取权限
  • 如果使用CSOM,逻辑完全一致:先获取Folder对象的ServerRelativeUrl,再构建相同结构的CAML查询
  • 不要省略FSObjType=0的条件,否则查询结果会包含文件夹本身

内容的提问来源于stack exchange,提问作者Rojin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:57:26