我正在尝试设置一个依赖于“ 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。 问题在于这不起作用,因为它们都在命令提示符的同一实例中运行,并且似乎不知道rubyinstaller设置的新PATH。
是否可以使用批处理文件来执行此操作?当然,如果我再次运行批处理文件,则可以检测到gem,它将能够运行第一个命令,然后当然可以跳过if语句。
答案 0 :(得分:0)
@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)
。
安装可以由Setup Command Line Parameters处理。
默认情况下,组件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
的代码将获取Ruby的安装路径。
如果定义,名为rubypath
的变量将存储该值。
如何安装 Ruby 是首选。 无论哪种方式,脚本都将处理许多基本处理。
gem
命令可以执行。如果即使已找到安装路径,也要安装Ruby,
然后删除if errorlevel 1
条件。进行如下更改
您的环境所需。