搜索具有通用命名约定的文件

时间:2013-06-04 18:11:22

标签: c# filenames uniqueidentifier

我有一个文件夹,里面有38,000多个.pdf文件。我不是将它们全部放入一个文件夹的天才,但我现在有把它们分开的任务。对我们有价值的文件都具有相同的基本命名约定,例如:

123456_20130604_NEST_IV 456789_20120209_VERT_IT

如果可能,我正在尝试执行的操作是在文件夹中搜索具有该特定命名约定的文件。同样,只搜索具有6位数字,下划线,然后是8位数字后跟另一个下划线的文件。有点像*****_********。我在网上搜索过,但运气不好。任何帮助都会很棒!

4 个答案:

答案 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}_"}

enter image description here

答案 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#中编写一个完成所有操作的主程序):

  1. 打开Windows命令提示符(start / run / cmd),导航到正确 文件夹,然后“dir * .pdf> pdf_files.txt”。这会给你一个 包含特定文件夹内所有pdf文件的文件。
  2. 在Notepad ++中打开txt文件(pdf_files.txt),然后按“ctrl + f” (找到)“激活单选按钮”正则表达式“
  3. 键入:[0-9]{6}_[0-9]{8}_.*\.pdf并按"Find all in current document"
  4. 复制结果并保存到新的.txt文件
  5. 现在你有一个文本文件,其中包含你可以做你想做的所有pdf文件(创建一个c#程序来解析文件并根据他们的名字或其他任何方式移动它们)