2013-09-12 7 views
1

Я пытаюсь создать скрипт powershell, который откроет HTA-файл, но только если он может видеть HTML-файл в той же папке.Открытие файла HTA

У меня есть следующий сценарий из другого вопроса о stackoverflow, но, похоже, он не может заставить его работать - может ли кто-нибудь указать мне в правильном направлении?

Первая часть определяет имя файла HTML (так называемый Textbox1.html). Следующая часть устанавливает путь к файлу как \\network location\Textbox1.html. Затем в заключительной части указано, что если Textbox1.html существует, откройте \\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" 
} 
+0

Вы хотите открыть HTA или файл HTML? И откройте HTA как приложение, а не как контент, который я предполагаю? –

ответ

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 означает «не равны», поэтому на самом деле вы пытаетесь открыть файл .hta только если файл с расширением .html не существует. Код, который у вас есть, хотя и слишком громоздкий, работает иначе, поэтому, вероятно, это причина, по которой он не работает для вас.

  • Еще один совет: вам не нужно проверять логическое условие равенства или неравенства. if (<boolean> -eq $true) { ... - то же, что и if (<boolean>) { ..., а также if (<boolean> -ne $true) { ... - это то же самое, что и if (! <boolean>) { .... Итак, ваш , если с использованием класса .NET (который вам действительно не нужен) должен быть просто if ([IO.File]::Exists($filePath) { ....

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. 
     } 
-1
<script> 
    function FileStatus(fileSearch, fileOpenName) { 
     var fso = new ActiveXObject('Scripting.FileSystemObject'); 
     if (fso.FileExists(fileSearch)) { 
      var f = fso.GetFile(fileOpenName); 
      var fileOpenName = f.ShortPath.toUpperCase(); 
      var ws = new ActiveXObject("WScript.Shell"); 
      ws.Run(fileOpenName); 
     } 
     else { 
      alert ('File '+fileSearch+' no exist'); 
     } 
    } 
</script> 

<input type="button" value="Go" onclick="FileStatus('\\*****path to file\Textbox1.html', '\\*****path to file\HTA3.hta');"> 
+0

Возможно, вы можете немного объяснить свое решение? Почему бы вам не дать ответ в качестве сценария powershell? –

+0

JScrit - альтернативное решение. –

+0

Что такое «JScrit»? –

Смежные вопросы