我正在构建一个 Windows .bat 脚本来自动编译和安装 CERN 的 Geant4 工具包(但我的以下问题与我要处理的软件无关)。到目前为止我设法做的似乎工作正常,但我对在脚本末尾设置环境变量的方式不满意。
要完成安装,我必须设置环境变量以指示所需数据集的路径,以及 C++ 包含和库目录(我选择为这些文件修改“PATH”变量)。我想为当前脚本(使用set
命令)和下一次执行(使用setx
命令)设置它们
我现在使用的脚本如下:
REM to get the path to directory where this bat file is executed from.
set G4_bat_file_dir=%~dp0
REM set the environement variables for next cmd runs
REM adding to local (temporary) PATH
set G4dataset_RootDir="%G4_bat_file_dir%\install\share\Geant4-10.4.3\data\"
REM adding environment variables for current and next cmd executions
setx G4dataset_RootDir "%G4_bat_file_dir%\install\share\Geant4-10.4.3\data\"
setx G4ABLADATA %G4dataset_RootDir%\G4ABLA3.1
setx G4ENSDFSTATEDATA %G4dataset_RootDir%\G4ENSDFSTATE2.2
setx G4LEDATA %G4dataset_RootDir%\G4EMLOW7.3
setx G4LEVELGAMMADATA %G4dataset_RootDir%\PhotonEvaporation5.2
setx G4NEUTRONHPDATA %G4dataset_RootDir%\G4NDL4.5
setx G4NEUTRONXSDATA %G4dataset_RootDir%\G4NEUTRONXS1.4
setx G4PIIDATA %G4dataset_RootDir%\G4PII1.3
setx G4RADIOACTIVEDATA %G4dataset_RootDir%\RadioactiveDecay5.2
setx G4REALSURFACEDATA %G4dataset_RootDir%\RealSurface2.1.1
setx G4SAIDXSDATA %G4dataset_RootDir%\G4SAIDDATA1.1
set G4ABLADATA=%G4dataset_RootDir%\G4ABLA3.1
set G4ENSDFSTATEDATA=%G4dataset_RootDir%\G4ENSDFSTATE2.2
set G4LEDATA=%G4dataset_RootDir%\G4EMLOW7.3
set G4LEVELGAMMADATA=%G4dataset_RootDir%\PhotonEvaporation5.2
set G4NEUTRONHPDATA=%G4dataset_RootDir%\G4NDL4.5
set G4NEUTRONXSDATA=%G4dataset_RootDir%\G4NEUTRONXS1.4
set G4PIIDATA=%G4dataset_RootDir%\G4PII1.3
set G4RADIOACTIVEDATA=%G4dataset_RootDir%\RadioactiveDecay5.2
set G4REALSURFACEDATA=%G4dataset_RootDir%\RealSurface2.1.1
set G4SAIDXSDATA=%G4dataset_RootDir%\G4SAIDDATA1.1
setx Geant4_DIR %G4_bat_file_dir%\install\lib\Geant4-10.4.3\
REM adding to PATH the paths to libraries and includes for Qt4 and Geant4.
setx PATH "%G4_bat_file_dir%\install\lib;%G4_bat_file_dir%\install\bin;%G4_bat_file_dir%\xerces-c\instal\bin;%G4_bat_file_dir%\xerces-c\instal\lib;%G4_bat_file_dir%Qt4\install\bin;%G4_bat_file_dir%Qt4\install\lib;%PATH%"
路径%G4_bat_file_dir%\install\lib;%G4_bat_file_dir%\install\bin;%G4_bat_file_dir%\xerces-c\instal\bin;%G4_bat_file_dir%\xerces-c\instal\lib;%G4_bat_file_dir%Qt4\install\bin;%G4_bat_file_dir%Qt4\install\lib
是我要附加的路径。
这是我在运行脚本 2 次后获得的环境变量设置的屏幕截图:
http://djienne.free.fr/env.png
这远非理想,有几件事我不满意:
变量中的所有路径都被完全使用,然后 PATH 变量也变得太长,我收到错误“警告:正在保存的数据被截断为 1024 个字符”。
如果我连续两次运行脚本,它会在 PATH 条目中产生重复项(并且超过 1024 个字符限制的所有内容都会被截断)
此外,如果我将此代码放在我的主要编译/安装脚本的末尾,它会给出错误
'setx' is not recognized as an internal or external command, operable program or batch file.
,因此不会创建/修改环境变量。但是,如果我将此脚本作为单独的 .bat 文件运行,它就可以工作。所以有些东西我不明白。(我指定我总是“以管理员身份运行”来运行脚本。)
在此先感谢您的帮助。