我有一个文件夹,里面有38,000多个.pdf文件。我不是将它们全部放入一个文件夹的天才,但我现在有把它们分开的任务。对我们有价值的文件都具有相同的基本命名约定,例如:
123456_20130604_NEST_IV 456789_20120209_VERT_IT
如果可能,我正在尝试执行的操作是在文件夹中搜索具有该特定命名约定的文件。同样,只搜索具有6位数字,下划线,然后是8位数字后跟另一个下划线的文件。有点像*****_********
。我在网上搜索过,但运气不好。任何帮助都会很棒!
答案 0 :(得分:2)
var regex = new Regex(@"^\d{6}_\d{8}_", RegexOptions.Compiled);
string[] files = Directory.GetFiles(folderPath)
.Where(path => regex.Match(Path.GetFileName(path)).Success)
.ToArray();
files
将包含符合条件的文件路径。
我的例子C:\Temp\123456_20130604_NEST_IV 456789_20120209_VERT_IT.pdf
,我事先已经添加了。
作为奖励,这里有PowerShell脚本(假设您在正确的文件夹中,否则使用gc "C:\temp"
而不是dir
):
dir | Where-Object {$_ -match "^\d{6}_\d{8}_"}
答案 1 :(得分:1)
? - 单个字符 * - 多个字符
所以,我会说使用?????? _ ???????? _ ???? _ ??。*获取所有文件 您可以从命令提示符处使用move或copy命令来执行此操作。 如果要进行模式匹配等高级搜索,请使用windows grep:http://www.wingrep.com/
答案 2 :(得分:1)
你熟悉正则表达式吗?如果不是,它们是搜索特殊格式的字符串的通用方法。我看到你用C#标记了你的问题,所以假设你正在编写一个C#脚本,你可以试试.NET正则表达式模块。
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx
如果您是初学者,可以从这里开始。
http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial
答案 3 :(得分:0)
有很多方法可以解决这个问题。我喜欢做的是将工作分成不同的步骤,每一步都有清晰的输出/数据。因此,我将通过以下方式解决这个问题(因为这对我来说似乎更容易,而不是在c#中编写一个完成所有操作的主程序):
[0-9]{6}_[0-9]{8}_.*\.pdf
并按"Find all in current document"