在 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 {...}
我想在 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 {...}