在 Powershell 中的 HTML 个文件中查找 <img> 个标签

Finding <img> tags in HTML files in Powershell

我想在 Powershell 中创建一个简单的代码,它只检查 HTMl 个文件的文件夹中没有使用哪些图像。所以我想在本地(不是通过 URI)打开每个 HTML 文件并检索所有标签。听起来还不错。

我已经完成了研究并且进展顺利,我想出了这个代码:

Foreach ($imageFile in $imageFiles){
    Foreach ($file in $HTMLFiles)
    {
        Write-Debug "Processing: $file"                    
        $html = New-Object -ComObject "HTMLFile"
        $source = Get-Content -Path $file.FullName -Raw
        $html.IHTMLDocument2_write($source);       
        $nbImages = $html.Images.length        

        ForEach ($i in $html.Images){
            #$i.getTags("src")
        }          
    } 
}

问题 1:我正在处理 HTML 文件,我(重新)转换为 HTML 文件以访问有用的方法。有没有简单的方法?

问题 2 和问题:我只是找不到一种方法来检查我的图像标签集。我怎么做? 我检查了我的代码如何在源代码中找到图像,它是正确的。我只想从集合本身获取信息。

谢谢你的帮助,我真的卡在这里了!

您可以尝试对 select 所有 <img> 标签使用 /<img \w*>/g 这样的正则表达式

PowerShell 让您认为它有循环的等价物,但实际上没有。 foreach 不做与 |%{...} 相同的事情。

在我的示例中,我必须通过检索 $HTMLFiles 并将其重定向到 %{} 的方式替换我的第二个 foreach。这样,PS "knows" $htmlFiles 变量中的内容。

结论: 比 foreach 循环更喜欢管道。由于管道,管道让 PS 跟踪表达式的结果。 Foreach 循环似乎阻止它这样做。

结论 2 和更高的精度: 最后,我找到了一种使用 foreach 来完成它的方法。 而不是:

ForEach ($i in $html.Images){
  ...
}  

做:

$images= @($html.Images)
$images | ForEach {...}