Hi,我是个小白,问个小白问题。
我这里有一个配置文件,比如search.txt,内容如下。我想把这个search.txt里面的当为搜索条件,即收索test目录底下所有txt文件内有字符串“HELLO”的文件,并导出结果,请问如何做呢?
TYPE=txt
STRING=HELLO
DIR=test
1 Answers
假如你的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.】
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
再次感谢。
不知道为啥发了那么多个重复的回复,但是又删不掉。。。
