为什么其他文件夹路径也添加到使用SetX的系统PATH而不仅是指定的文件夹路径?
我有一个批处理文件,我从C ++调用system("name.bat")
。在该批处理文件中,我试图读取注册表项的值。从C ++调用批处理文件会导致set KEY_NAME=HKEY_LOCAL_MACHINE\stuff
失败。
但是,当我直接运行批处理文件(双击它)时,它运行正常。不确定我做错了什么。
批处理文件:
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Ansoft\Designer\2014.0\Desktopset VALUE_NAME=InstallationDirectoryREG QUERY %KEY_NAME% /v %VALUE_NAME%
C ++文件:
int main(void){ system("CALL C:\\HFSS\\setup_vars.bat"); return 0;}
更新1:
我发现密钥实际上是在64位注册表中,而我正在构建一个32位的C ++解决方案。一旦我修复了它,它发现注册表键很好。
现在我在将该路径添加到PATH变量时出现问题。它不是创建系统变量,而是创建用户变量PATH并将其添加到那里。
从命令行运行。
码:
set KEY_NAME=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop\set VALUE_NAME=InstallationDirectoryFOR /F "usebackq skip=1 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME%`) DO ( set ValueName=%%A set ValueType=%%B set ValueValue=%%C)if defined ValueName ( @echo Value Value = %ValueValue%) else ( @echo %KEY_NAME%\%VALUE_NAME% not found.):: Set PATH Variableset path_str=%PATH%set addPath=%ValueValue%;echo %addPath%echo %ValueValue%echo %PATH%| find /i "%addPath%">NULif NOT ERRORLEVEL 1 ( SETX PATH "%PATH%) else ( SETX PATH "%PATH%;%addPath%;" /M)
更新2:
我移动了选项/ M的位置,现在它正在添加到正确的PATH变量。
但是,当我这样做时,它不止一次添加PATH(3次),然后它还添加了一个到visual studio amd64文件夹的路径。
我很确定为什么会这样。