我正在尝试编写一个脚本,单击该脚本时会在Windows中的PATH环境变量中添加几个条目,而不是手动进行更改.我看到.bat文件在Windows上一直被用于各种原因,因此.bat脚本可以帮助我这样的东西吗?
我实际上需要从Internet上的某个位置下载zip,将其解压缩到指定位置,然后更新环境变量中的PATH.从来没有这样做,所以任何提示赞赏.
我正在尝试创建一个Windows批处理文件来自动设置环境变量以使用python 2.4或python 3.3.
python 2.4和3.3都安装在我的系统上.这是我的代码:
::To toggle between Python24 and Python 33
@echo on
if (%PYTHONHOME:~-2%) == "24" (setx PYTHONHOME "C:\Python33" && setx PATH %PATH:Python24=Python33% ) else (setx PYTHONHOME "C:\Python24" && setx PATH %PATH:Python33=Python24% )
pause
Run Code Online (Sandbox Code Playgroud)
首先,我将PYTHONHOME设置为 C:\Python24
但是上面的脚本给出了以下错误:
SUCCESS: Specified value was saved.
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.
Run Code Online (Sandbox Code Playgroud)
我的PYTHONHOME仍指向python 24,没有任何改变.setx命令不会更改环境变量.导致此错误的原因是什么?
我想创建一个批处理文件以将当前目录添加到我的系统变量PATH
( 不是我的用户变量)。
当我使用时:
SETX /M PATH "%CD%;%PATH%"
Run Code Online (Sandbox Code Playgroud)
它做了所需的事情。但是,我收到一条错误消息:
保存的数据被截断为 1024 个字符。
当我使用 GUI 检查系统变量时,我看到用户路径已添加到系统路径中。因此,系统路径有重复的条目。
我尝试将%PATH%
变量分配给临时变量并进行回显,但我也看到了重复的情况。
我在一些堆栈答案中看到,%PATH%
我们在批处理文件中使用的变量实际上是用户路径和系统路径的串联。
在命令提示符下,我尝试了:
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH"
Run Code Online (Sandbox Code Playgroud)
但我不太清楚我们是否可以使用它来获取该 PATH 值并分配给另一个变量。
我正在阅读一篇关于ss64关于命令提示符中的环境变量的文章。
本文后面有一个表,其中列出了命令提示符中常见的环境变量。其中列出的一些变量被称为易失性(只读)。文章中的一句话指出:-
动态环境变量是只读的,并且每次扩展变量时都会进行计算。当所有变量都用 SET 列出时,这些变量将不会出现在列表中。不要尝试直接设置动态变量。
后两句话我明白了。但我无法理解第一个。
疑问:-
%userprofile%
是非易失性变量,解析为%SystemDrive%\Users\{username}
,%homepath%
是易失性变量,解析为Users\{Username}
。这两个命令非常相似(除了systemdrive
)。那为什么一个是易失性的,另一个是非易失性的呢?
变量动态的标准是什么?是什么使%appdata%
(只是一个例子)成为非易失性变量?
每次扩展变量时都会计算动态变量,这对于诸如此类的变量是有意义的,%CD% %DATE% %TIME% %RANDOM%
因为如果它们是非易失性的,它们就会失去其功能。但效果如何呢%homepath%
?
一些非易失性变量中含有某种动态成分。前任。%userprofile%
有%SystemDrive%
并且{username}
在它的路径中。那么这些变量怎么不是动态的呢?
我有一个批处理文件,我使用system("name.bat")
. 在该批处理文件中,我试图读取注册表项的值。从 C++ 调用批处理文件会导致set KEY_NAME=HKEY_LOCAL_MACHINE\stuff
失败。
但是,当我直接运行批处理文件(双击它)时,它运行良好。不知道我做错了什么。
批处理文件:
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Ansoft\Designer\2014.0\Desktop
set VALUE_NAME=InstallationDirectory
REG QUERY %KEY_NAME% /v %VALUE_NAME%
Run Code Online (Sandbox Code Playgroud)
C++文件:
int main(void)
{
system("CALL C:\\HFSS\\setup_vars.bat");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更新1:
我发现密钥实际上在 64 位注册表中,并且我正在将 C++ 解决方案构建为 32 位。一旦我解决了这个问题,它就会发现注册表项很好。
现在我在将该路径添加到我的PATH变量时遇到了问题。它不是创建系统变量,而是创建用户变量PATH并将其添加到那里。
从命令行运行有效。
代码:
set KEY_NAME=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop\
set VALUE_NAME=InstallationDirectory
FOR /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 …
Run Code Online (Sandbox Code Playgroud)