如何从SVN仓库路径下获取所有pdf和doc格式的文件?
问题根因
你在代码中直接将带|管道符的字符串作为svn命令的入参传入是无效的:管道符是操作系统shell(cmd、bash等)的专属功能,并非svn.exe本身支持的参数。直接传给svn程序时,后面的grep/find相关内容会被识别为svn list的无效参数,因此返回空结果。你直接在cmd中执行命令时是shell先解析了管道逻辑,所以能正常运行。
可行解决方案
方案1:通过shell执行整行命令(适合Windows环境)
直接调用cmd.exe执行完整命令,让shell处理管道逻辑,同时用findstr实现多后缀匹配,示例代码如下:
// 以C#为例,arguments参数传给cmd.exe而非svn.exe arguments = $"/c svn.exe list -R {link} | findstr /i /r \"\\.pdf$ \\.doc$ \\.docx$\"";
参数说明:
/i忽略大小写,可同时匹配.PDF、.Pdf等格式/r启用正则匹配,$限定匹配文件名末尾的后缀,避免命中文件名中间带pdf/doc字符的文件- 额外加了
.docx匹配,可根据需求删掉
方案2:代码层面过滤结果(兼容性更强,跨平台可用)
不依赖shell管道逻辑,稳定性更高:
- 先执行
arguments = $"list -R {link}"拿到全部文件列表 - 在代码中遍历返回的每一行文件名,自行判断是否以
.pdf/.doc/.docx结尾,保留符合条件的结果即可
原有命令失效的具体原因
- 带grep的命令:Windows原生cmd不自带grep工具,且没有走shell解析管道逻辑,完全无效
- 带
find.pdf的命令:cmd中find命令语法错误,缺少空格和匹配内容的引号,正确原生用法为find ".pdf"
内容的提问来源于stack exchange,提问作者Xia
相关产品推荐
相关产品推荐

