【问题标题】:How to modify this Powershell code so that hyperlinks will also work for HTML files in subdirectories?如何修改此 Powershell 代码以使超链接也适用于子目录中的 HTML 文件?
【发布时间】:2013-07-09 13:54:08
【问题描述】:

现有代码扫描 IIS 根目录及其子目录以查找 .htm 文件,并生成新的 .htm 文件,其中仅包含指向根目录中 .htm 文件的有效超链接。根子目录中的 .htm 文件的超链接无法正常工作,因为超链接中没有包含子文件夹路径。 我想修改现有代码,以便子文件夹中 .htm 文件的超链接也可以使用。

Get-ChildItem "c:\inetpub\wwwroot" -Recurse -Force |
  ConvertTo-Html -Fragment Name, Name, LastWriteTime `
    -PreContent '<html><head><title>Test</title></head><body>' `
    -PostContent '</body></html>' |
  % { $_ -replace '<th>.*</th>','<th>Files</th>' `
         -replace '<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',
                  '<td><a href="$1">$2</a> $3</td>'

  } | Set-Content "c:\inetpub\wwwroot\index.htm"

【问题讨论】:

  • answer复制/粘贴工作代码真的那么难吗?
  • 答案产生的超链接 (c:/inetpub/wwwroot/NH0000/NH0000-09-07-2013-03-19.htm) 不适用于 Web 服务器。记住这是网络服务器,所以正确的链接应该是这样的(172.16.x.x/NH0000/NH0000-09-07-2013-03-19.htm)。现在如何生成这样的超链接是个问题。
  • 感谢您的帮助,欢迎提出任何新建议。

标签: html powershell hyperlink


【解决方案1】:

由于您需要在 URL 中交换 basedir(注意:这是重要的详细信息,您不应在问题中省略这些内容),这样的事情应该可以工作:

$basedir = 'c:\inetpub\wwwroot'
$exp     = [regex]::Escape($basedir)
$server  = 'http://172.16.x.x'

Get-ChildItem $basedir -Recurse -Force |
  select Name, LastWriteTime, 
    @{n="URL";e={$_.FullName -replace $exp, $server -replace '\\', '/'}} |
  ConvertTo-Html -Fragment URL, Name, LastWriteTime `
    -PreContent '<html><head><title>Test</title></head><body>' `
    -PostContent '</body></html>' |
  % { $_ -replace '<th>.*</th>','<th>Files</th>' `
         -replace '<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',
                  '<td><a href="$1">$2</a> $3</td>'
  } | Set-Content "c:\inetpub\wwwroot\index.htm"

附加的select 指令将FullName 转换为http://172.16.x.x/path/to/file 形式的新属性URL。然后ConvertTo-Html 将此新属性和传递的属性NameLastWriteTime 转换为HTML。

【讨论】:

  • 感谢您的帮助。您的代码效果很好!子文件夹中文件的超链接都可以使用。
  • Ansgar,我还有一个问题。有没有办法为IIS根目录中的每个子文件夹分别运行上面的代码。如果您更方便回答,我可以将其作为一个单独的问题。谢谢
  • @user2545794 这必须是一个单独的问题,是的。请在该问题中说明您希望如何处理每个文件夹,即,如果您想要为每个文件夹(仅包含该文件夹中的文件)或其他任何内容提供单独的输出文件。
  • 当然,我会单独提出一个问题。
  • 这里是额外的question
猜你喜欢
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多