如何读取文件内容并赋值给搜索条件


PowerShell交流中心分类: Questions如何读取文件内容并赋值给搜索条件
0
flyfree asked 6年 ago

Hi,我是个小白,问个小白问题。
我这里有一个配置文件,比如search.txt,内容如下。我想把这个search.txt里面的当为搜索条件,即收索test目录底下所有txt文件内有字符串“HELLO”的文件,并导出结果,请问如何做呢?
TYPE=txt
STRING=HELLO
DIR=test

1 Answers
1
Mooser Lee 管理员 answered 6年 ago

假如你的search.txt内容为:

TYPE=ps1
STRING=resource
DIR=D:\PS

你的脚本可以这样写:

# 将文本文件内容转换成对象
$searchKey = @{}
Import-Csv D:\PS\search.txt  -Delimiter '=' -Header @("Name","value") | 
foreach{
    $searchKey[$_.Name]=$_.value
}

# 扫描文件
$fileExtension = "*.{0}" -f $searchKey.TYPE
dir $searchKey.DIR -Filter $fileExtension | foreach {
    # 读文件内容
    $firstMatch = Get-Content $_.FullName  | 
        where { $_.contains($searchKey.STRING) } |
        select -First 1
    if($firstMatch) {
        @{File = $_.FullName;Match = $firstMatch}
    }
} | foreach {
    # 打印输出
    $outputItem = "在文件【{0}】中,找到了目标字符串【{1}】,匹配行内容为【{2}】" -f $_.File,$searchKey.STRING,$_.Match
    Write-Host $outputItem 
    # 文件输出
    # $outputItem | Out-File "result.txt" -Append
}

我的输出结果为:

在文件【D:\PS\exe-word-count-job.ps1】中,找到了目标字符串【resource】,匹配行内容为【#Get the cluster info so we can get the resource group, storage, etc.】
flyfree replied 6年 ago

Hi Mooser,
非常感谢你的回复。
刚试验了下,发现如果查找的目录里面如果有子目录,无法找子目录里面的文件,在您的帮助下,根据我的需求,优化了下面这样,发现可以输出我想要的结果。
ls test -recurse|select fullname|findstr /s $searchKey.STRING $fileExtension
test\aa\1\1.xml: hello
test\aa\1.xml: hello
test\bb\zzz\1.xml: hello

不好意思,大侠,可否再帮忙看下输出的log是否可以转换成html,还得带链接到文件所在路径。我尝试用convertTo-Html命令,估计用法不对,输出的结果是一些数字,不是我想要的结果。
ls test -recurse|select fullname|findstr /s $searchKey.kEY_STRING $fileExtension | ConvertTo-Html -As Table -Head (“Found File”,”Key Strings”) |Out-File D:\Test.html

再次感谢。

flyfree replied 6年 ago

不知道为啥发了那么多个重复的回复,但是又删不掉。。。