2

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

123456_20130604_NEST_IV 456789_20120209_VERT_IT

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

4

4 回答 4

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

在此处输入图像描述

于 2013-06-04T18:19:55.910 回答
1

? - 单个字符 * - 多个字符

所以,我会说使用?????? _ ?????????? _ ???? _ ??.* 获取所有文件 您可以使用命令提示符中的移动或复制命令来执行此操作。如果要进行模式匹配等高级搜索,请使用 windows grep: http: //www.wingrep.com/

于 2013-06-04T18:16:59.030 回答
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

于 2013-06-04T18:20:38.763 回答
0

有很多方法可以处理这个问题。我喜欢做的是将工作分成不同的步骤,每一步都有清晰的输出/数据。因此,我将通过以下方式解决这个问题(因为这对我来说似乎更容易,而不是在 c# 中编写一个可以完成所有工作的主程序):

  1. 打开 Windows 命令提示符(开始/运行/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 文件的文本文件,你可以用它做你想做的事情(创建 ac# 程序来解析文件并根据它们的名称或其他方式移动它们)
于 2013-06-04T18:37:54.633 回答