Нет необходимости использовать cmd /c
для вызова командного файла из PowerShell ; просто вызовите его напрямую , что в случае указанного пути к пакетному файлу требует использования &
, оператора вызова .
Ваш пакетный файл:
- отсутствует
@echo off
, чтобы подавить отображение команд перед их выполнением - по ошибке пытается установить переменные среды без
SET
команда - по ошибке пытается использовать
#
для инициирования комментария к строке.
В общем, похоже, что код был скопирован из Bash сценарий оболочки и плохо адаптирован для cmd.exe
.
Вызов из PowerShell:
& "C:\Source\BuildSource\SATCOM\EBEM\LCT GUI 02.01.04\run_ebem_lct_020104.bat"
Исправлено содержимое пакетного файла:
@echo off
setlocal
:: Set the window title - this will revert when the batch file exits,
:: so there is little point in doing this, given that `start` below
:: launches the application *asynchronously* and the batch file therefore
:: exits quickly.
title EBEM LCT 02.01.04
:: Temporarily add a folder to the PATH.
:: Thanks to `setlocal`, there is no need to restore the previous path afterwards.
Set "Path=C:\Program Files\jre7\bin;%Path%"
:: Start the application
start javaw -classpath .\EBEM_LCT_020104.jar;comm.jar ebem_lct.system.LCT_Client
Альтернатива состоит в том, чтобы вообще обходиться без командного файла, а делать все это в PowerShell :
# Save the previous $env:Path value and temporarily prepend a new folder.
$prevPath, $env:Path = $env:Path, "C:\Program Files\jre7\bin;$env:Path"
# Invoke the (GUI) application, which launches asynchronously.
javaw -classpath .\EBEM_LCT_020104.jar;comm.jar ebem_lct.system.LCT_Client
# Restore the original $env:Path value.
$env:Path = $prevPath