如何在Windows批处理文件中使用SETX命令(How to use setx command i

2019-08-07 17:10发布

我试图创建一个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

首先我必须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.

我PYTHONHOME仍然指向到Python 24,并没有什么改变。 该SETX命令不更改环境变量。 是什么原因造成这个错误?

Answer 1:

Windows命令行错误:

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.

摘要:

您使用的是SETX命令,当只有一个被允许为其指定多个令牌。

如何复制在Windows上的错误:

打开一个窗口CMD端子和输入这些命令。 这引发错误:

C:\Users\Charity>setx FANCYPANTS string with spaces

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.

执行相同的命令,但引用您的字符串是这样的:

C:\Users\Charity>setx FANCYPANTS "string with spaces quoted"
SUCCESS: Specified value was saved.
C:\Users\Charity>

变量设置,在这里重新启动CMD终端负载的变化。

C:\Users\Charity>echo %FANCYPANTS%
string with spaces quoted

环境变量保存。 现在将其删除。

C:\Users\Charity>setx FANCYPANTS ""
SUCCESS: Specified value was saved.

在这里重新启动CMD终端负载的变化。 再次打印内容。

C:\Users\Charity>echo %FANCYPANTS%
%FANCYPANTS%

变量的FancyPants被删除,不再存在。



Answer 2:

SETX要求值与被引用的空间,和值内引号必须转义为\"

最好也使用延迟扩展,以防止特殊字符在批量分析阶段。

下面将不仅切换值新的CMD会话,它也将切换数值为批处理脚本运行的剩余部分。 一旦脚本结束在脚本的最后一个隐含的ENDLOCAL将恢复到旧值在当前会话中 。 如果需要,可以修改此脚本以保存新值过去ENDLOCAL屏障。

@echo on
setlocal enableDelayedExpansion
if "!PYTHONHOME:~-2!" == "24" (
  set "PYTHONHOME=C:\Python33"
  set "PATH=!PATH:Python24=Python33!"
) else (
  set "PYTHONHOME=C:\Python24"
  set "PATH=!PATH:Python33=Python24!"
)
setx PYTHONHOME "!home!"
setx PATH "!path:"=\"!"
pause


Answer 3:

SETX命令是在命令的语法非常依赖。 下面的示例示出了基本语法使用设置路径环境变量:

SETX PATH "%PATH%;Path to new thing added" /M

这也将增加新的路径系统注册表,但仍不会增加其用于当前的会话。 重新启动终端为它生效。



Answer 4:

我真的很喜欢这种方式

这里的批处理脚本:

@setlocal enableextensions enabledelayedexpansion
@echo off
set str1=%PYCURRENTPATHS%

if not "x%str1:python2=%" == "x%str1%"  (
    set PYCURRENTPATHS=%PY3PATHS%
) else (
    set PYCURRENTPATHS=%PY2PATHS%
) 
setx PYCURRENTPATHS %PYCURRENTPATHS%
set PATH=%PATH%
endlocal

我们需要3个变量:(使用“设置”,设置电流端子,使用“SETX”设置永久性变量)

set PY2PATHS=D:\ProgramData\Anaconda3\env\python2;D:\ProgramData\Anaconda3\env\python2\Scripts
set PY3PATHS=D:\ProgramData\Anaconda3;D:\ProgramData\Anaconda3\Scripts
setx PY2PATHS %PY2PATHS%
setx PY3PATHS %PY3PATHS%
setx PYCURRENTPATHS %PY2PATHS%

并通过图形用户界面到您的路径添加“%PYCURRENTPATHS%”:

此示例使用水蟒和python2设置从该实施例: 康达创建-n python2蟒= 2.7水蟒

因此,对于超无痛的Windows蟒蛇,我不能建议以下解决方案足够了。 请试试看我想你会喜欢它。

1)使用Anaconda(开始使用Python 3在这个例子中)......对于我抗拒时间最长,有更好的运气与手工安装的python /管理,但由于网络问题,我被迫使用Anaconda(没要允许网络PIP网址:()

2)从水蟒提示安装python2: 康达创建-n python2蟒= 2.7水蟒

3)创建脚本以上,使你的Python安装可用的命令行(例如添加到路径)

您可以添加更多的虚拟蟒蛇的环境中,将它们在命令行或增强该脚本以及(如PY2Tensor,Py3Scikit等),或者简单地管理它们通过畅达:)

从预编译包蟒蛇好处。 无包不匹配,不稳定的版本中,历史遗留问题或损坏的依赖。

我还是喜欢Linux的发展,但如果你必须使用Windows和蟒蛇,它变得更好。

注意:设置PATH =%PATH%的原因的“PATH” +在当前会话“%PYCURRENTPATHS%”重新EVAL,一个新的会话将反映没有这条线的变化



文章来源: How to use setx command in a windows batch file