【问题标题】:Open a file from an HTML file created in PowerShell从 PowerShell 中创建的 HTML 文件打开文件
【发布时间】:2013-11-21 21:29:10
【问题描述】:

我在 PowerShell 中有一个脚本,它创建一个 HTML 文件,其中包含特定类型的文件列表(例如“.txt”)以及有关它们的一些基本信息。现在我想添加一项功能,可以单击脚本创建的 HTML 页面中的文件名来打开它。任何人至少可以提示如何做到这一点?这是我收到的当前输出(虽然我模糊了文本):

这是我正在使用的脚本(来自 alroc 对这个问题的回答:Write multiple objects obtained via get-ChildItem into HTML):

$types=@("*.txt", "*.pdf")
$myfiles = @();
foreach($type in $types){
    $myFiles += Get-ChildItem C:\POWERSHELL -Filter $type -Recurse 
}

$myfiles | ConvertTo-Html -property fullname,lastwritetime,length | out-file c:\status23.html;

【问题讨论】:

  • 顺便说一句,如果您还显示 powershell 脚本,我们可能会为您提供更好的帮助。
  • 我使图像更清晰。 powershell 脚本就像先生的脚本一样。 alroc 发布在我的另一个线程中:stackoverflow.com/questions/19911713/… 不幸的是,我所有的其他修改都没有带来任何好处 :(

标签: html powershell


【解决方案1】:

为了给文件创建一个可点击的链接,你需要使用这种 HTML 标签:

<a href='file:///filename'>Display Text</a>`

但是,如果您想更改 HTML,则不能像在您引用的脚本中那样使用 ConvertTo-Html,因为该 cmdlet 会转义您提供的任何输入,所以您需要自己创建 HTML。对于一个简单的表格来说,这并不难,而且它可以让您更好地控制输出的外观。

试试这个(除了添加 HTML 输出之外,我还压缩了你的代码):

$output = "<html>`n<table>`n<tr><th align='left'>Full Name</th><th align='left'>Last Write Time</th><th align='right'>Size (bytes)</th></tr>`n"
Get-ChildItem '*.txt','*.ps1' -Recurse | %{
  $output += "<tr><td><a href='file:///$($_.FullName)'>$($_.FullName)</a></td><td>$($_.LastWriteTime)</td><td align='right'>$($_.Length)</td></tr>`n"
}
$output += "</table>`n</html>"
$output | Out-File status23.html

几点说明:

  • 您不必担心对插入值进行 HTML 转义,因为您所包含的所有属性(FullName、LastWriteTime、Length)都不能包含任何需要在 HTML 中转义的字符。
  • `ns 不是绝对必要的,它们只是使生成的 HTML 文件更具可读性;如果您将它们排除在外,页面将呈现相同的效果。

【讨论】:

    【解决方案2】:

    首先,您需要将它们包装在带有文件路径的 html href 标记中。

    如果他们有权访问该 txt 文件,并且他们正在使用浏览器查看 html 文件,则单击该文本文件将在浏览器中打开。

    例子:

    $file="C:\test\to.txt"
    
    "<HTML><a href=`"$file`">$file</a></HTML>" | Out-file "C:\test\test.html"
    

    【讨论】:

    • 但问题是它可能不仅是 .txt 文件,还可能是 .pdf 或 .doc
    • 无论扩展名如何,浏览器都会根据文件的配置方式处理打开文件。如果它是 PDF,那么浏览器应该启动 pdf 阅读器(如果它是这样设置的)。
    • 请注意,您不能只使用文件名作为 href 值。 href 必须是一个有效的 URL,它要么是相对于当前页面的,要么以一个有效的方案标识符开头。对于本地文件系统上的文件,即file:///。单独使用 Windows 路径作为 href 值会导致链接出错,抱怨“C”不是有效的协议,或类似的东西。
    • File:/// 是正确的前缀。但是 chrome 和 IE 似乎可以很好地处理上述示例,它们会自动添加 file:///。不过,正如 Adi 所说,最好将其放在 href 中。
    • IE 和 Chrome 确实会添加 file:/// 如果它们识别 Windows 文件名,但 FireFox 会阻止,其他浏览器可能会这样做。在任何情况下,遵循标准比依赖特定于实现的更正更安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 2015-09-18
    • 2010-09-13
    • 1970-01-01
    • 2019-08-31
    • 2012-04-28
    相关资源
    最近更新 更多