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
再次感谢。
不知道为啥发了那么多个重复的回复,但是又删不掉。。。