Запуск Powershell из командного файла - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь выполнить эти команды в файле .bat

@echo off & setLocal EnableDelayedExpansion

powershell -NoLogo -NoProfile -Command ^    
    "$h = [int](Get-Date -Format "HH");" ^
    "$diff = (7-$h)*3600;" ^
    "if ($h -le 7 -or $h -ge 0) { ECHO $h; ECHO $diff; }"

Но при этом выдается сообщение о том, что команда не распознана. Здесь я пытаюсь получить час и вычесть $ h из 7. Затем умножьте результат на 3600 и напечатайте его на консоли.

Может кто-нибудь сказать мне, что я делаю неправильно?

Ответы [ 3 ]

1 голос
/ 07 февраля 2020

Правильный синтаксис powershell будет выглядеть примерно так:

$h = [int](Get-Date -Format "HH")
    $diff = (7-$h)*3600
    if ($h -le 7 -or $h -ge 0) { 
        write-output $h 
        write-output $diff
    }

Вы можете сохранить этот код powershell в виде файла ps.1 и вызвать его из командного файла

1 голос
/ 07 февраля 2020

Попробуйте запустить их в одну строку:

powershell -NoLogo -NoProfile -Command "& {    $h = [int](Get-Date -Format 'HH'); $diff = (7-$h)*3600; if ($h -le 7 -or $h -ge 0) { Write-Output $h; Write-Output $diff }}"
0 голосов
/ 07 февраля 2020

Каретка ^ должна быть последним символом в строке, которая продолжается. В коде есть некоторые пробелы в первой строке.

Рассмотрим код с пробелами, проиллюстрированный добавлением символов канала в начало и конец строки.

|powershell -NoLogo -NoProfile -Command ^    |
|    "$h = [int](Get-Date -Format "HH");" ^|
|    "$diff = (7-$h)*3600;" ^|
|    "if ($h -le 7 -or $h -ge 0) { ECHO $h; ECHO $diff; }"|

Выполнение этого обеспечивает следующий вывод:

C:\Temp>t.cmd
Cannot process the command because of a missing parameter. A command must follow -Command.

PowerShell[.exe] [-PSConsoleFile <file> | -Version <version>]
...
'"$h = [int](Get-Date -Format "HH");"' is not recognized as an internal or external command, operable program or batch file.

В то время как удаление конечных пробелов работает следующим образом, | powershell -NoLo go -NoProfile -Command ^ | ...

C:\Temp>t.bat
10
-10800
...