пакетный файл - запуск установщика, который добавляет к PATH и запуск этого нового приложения из Bat - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь настроить командный файл, который использует "gem", который является менеджером пакетов для Ruby. В основном мы хотим запустить что-то вроде этого:

gem install cucumber -v 2.4.0

if %errorlevel% == 9009 (
  rubyinstaller-2.5.1-2-x64.exe
  gem install cucumber -v 2.4.0
)

Обычно, если у вас не установлен gem, вывод будет следующим:

C:\workspace\3rdparty-svn\CucumberCpp>gem install cucumber -v 2.4.0
'gem' is not recognized as an internal or external command,
operable program or batch file.

C:\workspace\3rdparty-svn\CucumberCpp>if 9009 == 9009 (
rubyinstaller-2.5.1-2-x64.exe
 gem install cucumber -v 2.4.0
)
'gem' is not recognized as an internal or external command,
operable program or batch file.

C:\workspace\3rdparty-svn\CucumberCpp>pause

if проверяет, существует ли gem, если нет, то мы устанавливаем ruby, а затем снова запускаем gem. Проблема в том, что это не работает, потому что все это запускается в одном и том же экземпляре командной строки, и кажется, что он не знает о новом PATH, который установлен rubyinstaller.

Есть ли способ сделать это с помощью командного файла? Конечно, если я снова запущу командный файл, то gem будет обнаружен, и он сможет выполнить первую команду, а затем, конечно, пропустить оператор if.

1 Ответ

0 голосов
/ 18 сентября 2018
@echo off
setlocal

rem Install Cucumber
2>nul gem install cucumber -v 2.4.0

if %errorlevel% neq 9009 (
    echo Cucumber install did not error code 9009.
    exit /b 0
)

rem Get Ruby path.
call :query_rubypath

if errorlevel 1 (
    echo Installing Ruby.
    rubyinstaller-2.5.1-2-x64.exe /verysilent
    call :query_rubypath
)

rem Update PATH
if defined rubypath (
    if "%path:~-1%" == ";" (
        set "path=%path%%rubypath%\bin"
    ) else set "path=%path%;%rubypath%\bin"
) else (
    >&2 echo Ruby path not found.
    exit /b 1
)

rem Use command gem or command "%rubypath%\bin\gem"
@rem "%rubypath%\bin\gem" install cucumber -v 2.4.0
gem install cucumber -v 2.4.0

if %errorlevel% == 9009 (
    >&2 echo Cucumber error code 9009.
    exit /b 1
)

exit /b

:query_rubypath
rem Get Ruby path from registry
set "rubypath="

for /f "tokens=1,2,*" %%A in ('
 reg query HKCU\Software\RubyInstaller\MRI\2.5.1
 /v InstallLocation
 2^>nul
') do if /i "%%~A" == "InstallLocation" set "rubypath=%%~C"

if not defined rubypath exit /b 1
exit /b 0

Установщик rubyinstaller-2.5.1-2-x64.exe компилируется с Inno Setup version 5.5.9 (u).

Установка может быть выполнена с помощью Параметры командной строки установки .

По умолчаниюкомпоненты ruby выбраны, а msys2 отменены.При переустановке программа установки прочитает записи об удалении, чтобы определить состояние установленных компонентов, чтобы выбрать, если не указан параметр /COMPONENTS.

При автоматической установке вы можете использовать, например:

rubyinstaller-2.5.1-2-x64.exe /verysilent /COMPONENTS="ruby,msys2"

Параметр /COMPONENTS является необязательным.

Переменная среды PATH обновляется с помощью:

C: \ Ruby25-x64 \ bin

Это будет путь установки по умолчанию для %systemdrive%.Сценарий найдет фактический путь из реестра.

Важные ключи реестра:

HKEY_CURRENT_USER\Software\RubyInstaller\MRI\2.5.1
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\RubyInstaller-2.5-x64-mingw32_is1

Код call :query_rubypath получит путь установки дляРубин.Переменная с именем rubypath будет хранить значение, если оно определено.

Как установить Ruby , как вы упомянули, это предпочтение.В любом случае, сценарий будет обрабатывать большую часть базовой обработки.

  • Сценарий найдет путь установки, чтобы можно было выполнить команду gem.
  • Ruby будетустанавливается, если путь установки не найден.

Если вы хотите установить Ruby, даже если путь установки найден, удалите условие if errorlevel 1.Внесите изменения, необходимые для вашей среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...