8

Python 2.4 または Python 3.3 を使用するように環境変数を自動的に設定する Windows バッチ ファイルを作成しようとしています。

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 コマンドは環境変数を変更しません。このエラーの原因は何ですか?

4

4 に答える 4

4

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
于 2013-01-21T17:37:29.350 に答える
1

このSETXコマンドは、コマンドの構文に大きく依存しています。次の例は、パス環境変数を設定するために使用する基本的な構文を示しています。

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

これにより、システム レジストリに新しいパスも追加されますが、現在のセッションにはまだ追加されません。ターミナルを再起動して有効にします。

于 2014-09-26T08:52:58.663 に答える