我试图创建一个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命令不更改环境变量。 是什么原因造成这个错误?
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被删除,不再存在。
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
该SETX
命令是在命令的语法非常依赖。 下面的示例示出了基本语法使用设置路径环境变量:
SETX PATH "%PATH%;Path to new thing added" /M
这也将增加新的路径系统注册表,但仍不会增加其用于当前的会话。 重新启动终端为它生效。
我真的很喜欢这种方式
这里的批处理脚本:
@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,一个新的会话将反映没有这条线的变化