以编程方式设置程序所需的环境变量

时间:2014-09-25 19:39:44

标签: windows batch-file environment-variables

我正在开发的项目需要GDAL库,跳过所有的东西,有一些复杂的安装,因为它们是Java的C绑定。无论如何,我确实找到了一个相对简单的预编译版本,唯一需要用户设置一些环境变量。

这很容易做到,但是这个过程仍然会让一些人感到困惑,所以要保持简单,我想像一个简单的“setup.bat”,它将在Windows中为你做到这一点。这是我到目前为止所得到的:

set "root=%~dp0"
set "gdalpath=%root%gdal-x64-11.1\"

setx PATH "%PATH%;%gdalpath%"
setx GDAL_DATA "%gdalpath%gdal-x64-11.1\gdal-data\"
setx GDAL_DRIVER_PATH "%gdalpath%gdal-x64-11.1\gdalplugins\"
setx PROJ_LIB "%gdalpath%gdal-x64-11.1\projlib\"

除了PATH之外,它的效果非常好。看起来有两个PATH,一个用于系统,一个用于用户环境变量。只需直接调用%PATH%即可将所有这些组合在一起,但使用setx PATH进行编写会将其全部写入用户PATH

例如,如果变量之前看起来像这样:

before

运行批处理文件后,它们看起来像这样:

after

在这个示例中确实保留了“C:\ PHP \”并在末尾添加了GDAL路径,但它看起来很麻烦。我的意思是我认为它或多或少有效并且做了它应该做的事情,但我宁愿让它更干净。那么有没有办法只获取用户PATH变量并追加到那个?

1 个答案:

答案 0 :(得分:1)

在发布之前是否为帮助页面键入setx /?(如/ k开关)?另外,setx不会执行当前的控制台窗口。

测试文件是否已经在路径中

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

阅读注册表。

@for /f "skip=2 tokens=3" %%A in ('Reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v AlwaysShowMenus') do @if "%%A"=="0x1" echo Matches

Pause

用户永久变量存储在此处。

HKEY_CURRENT_USER\Environment

VBScript WSH提供了更细粒度的环境访问。

来自帮助。

Environment属性包含WshEnvironment对象(环境变量的集合)。如果提供了strType,它将指定环境变量所在的位置,其中包含System,User,Volatile或Process的可能值。

以下代码检索系统环境变量NUMBER_OF_PROCESSORS。

Visual Basic脚本复制代码

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")

WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")