Powershell / Batch文件:验证文件是否包含字符串列表

时间:2016-09-23 19:32:54

标签: powershell batch-file

这是我目前的问题:我有1800个客户编号的清单(即123456789)。我需要确定这些数字中的哪一个出现在另一个更大(4 gb)的文件中。较大的文件是所有客户信息的固定宽度文件。我知道如何在SQL中执行此操作,但就像我说它是一个平面文件。

在搜索单个号码时,我使用的是我在本网站其他地方找到的一个非常有效的命令:

get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match "123456789" }

但是,我没有专业知识将其转换为另一个命令或批处理文件,它会加载list.txt并搜索customerinfo.txt中的所有行以获取必需的字符串。

时间不是主要限制因素,因为它在测试服务器上运行,并且将是一次性项目。

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

所以我感谢大家的帮助。每个人都给了我有用的信息,让我得到我的最终解决方案,所以我很感激。特别是那个问这个是编码请求的人,因为它让我意识到我需要写一些代码。

对于遇到同样问题的其他人来说,这是我最终使用的代码:

$matches = Get-Content .\list.txt
foreach ($entry in $matches)
{ $results = get-content FiletoSearch -ReadCount 1000 | foreach { $_ -match $entry }
    if ($results -eq $null) { 
    $entry }
    else {
    "found"}
    }

这样可以找到'找到所有找到的东西(这是我不需要的信息),并在找不到它时找回所搜索的值(这是我需要的信息)。

答案 1 :(得分:0)

match比较器可以处理多个值,您可以用条形|来区分它们字符。

e.g。 get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match "DEF|YZ" }

您还可以阅读文件的内容,并用您选择的字符替换换行符。因此,如果list.txt是要搜索的值列表,例如

DEF XY

然后您可以使用join运算符读取它并将其转换为以条形为单位的列表:

(Get-Content list.txt) -join "|"

将它们放在一起,您应该有解决方案:

$listSearch = (Get-Content list.txt) -join "|";
get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match $listSearch}