Я создаю скрипт Windows .bat для автоматической компиляции и установки инструментария Geant4 из CERN (но мои следующие вопросы не зависят от того, с каким программным обеспечением я хочу иметь дело).То, что мне удалось сделать до сих пор, похоже, работает нормально, но меня не устраивает то, как переменные среды устанавливаются в конце скрипта.
Чтобы завершить установку, мне нужно настроить средупеременные, чтобы указать путь к требуемым наборам данных, и 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, он работает.Так что есть кое-что, чего я не понимаю.(Я уточняю, что всегда запускаю сценарии как «администратор».)
Заранее благодарен за помощь.