1

我正在尝试创建一个将打开 HTA 文件的 powershell 脚本,但前提是它可以在同一文件夹中看到 HTML 文件。

我有以下关于stackoverflow的另一个问题的脚本,但似乎无法让它工作——有人能指出我正确的方向吗?

第一部分确定 HTML 文件的名称(称为Textbox1.html)。下一部分将文件路径设置为\\network location\Textbox1.html. 然后最后一部分说如果Textbox1.html存在, open \\network location\HTA3.hta

function GetTextboxExists
{
  $TextboxExists = "$Textbox1.html"
  return $TextboxExists
}
$filename = TextboxExists
$filePath = "\\*****path to file" + $filename

if ([IO.File]::Exists($filePath) -ne $true)
{
  & "\\*****path to file\HTA3.hta"
}
4

2 回答 2

1

我不确定你为什么要使用单独的函数来确定 .html 文件的名称,但无论如何,如果你想根据另一个文件是否存在来打开一个文件,它就像

if (Get-Item -ea SilentlyContinue <path of file to check for>) {
  Invoke-Item <path of file to open>
}

(假设“打开”是指与文件扩展名关联的默认操作 - 这就是您在使用 . 时所做的基本操作& "<path>"。)

因此,更具体地说,将其放在您的代码中:

if (Get-Item -ea SilentlyContinue "\\*****path to file\$Textbox1.html") {
    Invoke-Item '\\*****path to file\HTA3.hta'
}
  • 您没有指定$Textbox1是什么以及它是如何定义的,但我推断它包含 .html 文件的基本名称。

  • 我单引号引用了Invoke-Item的路径参数,因为您显示了 .hta 文件的静态路径;如果您使用任何变量来确定路径,请务必更改为双引号。

  • -ne操作符的意思是“不等于”,所以实际上你只是在 .html 文件存在时才试图打开 .hta 文件。您拥有的代码虽然过于繁琐,但除此之外确实可以工作,所以这可能是它不适合您的原因。

  • 另一个提示是,您不需要测试布尔条件是否相等或不相等。if (<boolean> -eq $true) { ...与 相同if (<boolean>) { ...,同样if (<boolean> -ne $true) { ...与 相同if (! <boolean>) { ...。因此,使用 .NET 类(您并不真正需要)的ifif ([IO.File]::Exists($filePath) { ...语句应该是简单的 .NET 类。

于 2013-09-12T04:51:54.820 回答
0

一个简单的方法是查看是否有txt文件。我选择使用 int,但 Boolean 也可以。

$files

Get-Content c:\Users\Athomsfere\Desktop\ | ForEach-Object `
    {
        if ($_.Extension -eq ".txt")
        {
            $files++  #Could also do $files = true
        }
    }

    if ($files -gt 0) 
      {
        Write-Host "Open HTA"
        #Start HTA code here.
      }
于 2013-09-12T02:53:48.037 回答