Каретка ^
должна быть последним символом в строке, которая продолжается. В коде есть некоторые пробелы в первой строке.
Рассмотрим код с пробелами, проиллюстрированный добавлением символов канала в начало и конец строки.
|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