windowsbatch-fileenvironment-variablessetx

How to use setx command in a windows batch file


I am trying to create a windows batch file to automatically set the environment variable to use python 2.4 or python 3.3.

Both python 2.4 and 3.3 are installed on my system. Here is my code:

::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

To start with I have PYTHONHOME set to C:\Python24

But the above script gives the following error:

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

My PYTHONHOME still points to python 24 and nothing is changed. The setx command does not change the environment variable. What is causing this error?


Solution

  • The Windows command line error:

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

    Summary:

    You are using a setx command and assigning it multiple tokens when only one is allowed.

    How to reproduce this error on Windows:

    Open a windows cmd terminal and enter these commands. This throws the error:

    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.
    

    Do the same command, but quote your string like this:

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

    The variable was set, restart the cmd terminal here to load changes.

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

    The environment variable is saved. Now delete it.

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

    restart the cmd terminal here to load changes. Print contents again.

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

    the variable FANCYPANTS was deleted and no longer exists.