web-dev-qa-db-ja.com

setxの無効な構文

setxコマンドを使用してOGRE_HOMEを設定しました:

setx OGRE_HOME D:\Program Files\OgreSDK

次に、OGRE_HOMEの値に変更する必要があります。設定したすべての値を検索するにはどうすればよいですか?コマンドをもう一度実行すると、次のように表示されます。

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
22
Aaron Lee

Ogre SDKへのパスには、スペース文字が含まれています。これは、別の引数への区切り文字として解釈されます。パスを"で囲んで、setxへの1つの引数として保持します。

setx OGRE_HOME "D:\Program Files\OgreSDK"

OGRE_HOME環境変数の現在の値を確認するには:

echo %OGRE_HOME%

値を設定してすぐにその値を確認しようとしている場合は、新しいコマンドプロンプトシェルを開いて値を確認する必要がある場合があります。

現在設定されているすべての環境変数を表示するには、次のコマンドを実行します。

set

特定のプレフィックスを持つ環境変数のみを表示するには(つまり、FOOFOOBARFOOBAZを表示します)、そのプレフィックスをsetの後に置きます。

set PREFIX

または、GUIを使用して環境変数を編集できます(ここではWindows 7を想定しています)。

  • Computerを右クリックし、Propertiesを選択します
  • 左側のペインでAdvanced system settingsをクリックします
  • ポップアップダイアログのAdvancedタブにいることを確認します
  • 下部にあるEnvironment Variables...をクリックします

ダイアログがポップアップし、ユーザー固有の環境変数とシステム全体の環境変数が表示されます。値を選択し、「新規」/「編集」/「削除」ボタンを使用して、それらを操作します。

27
ajp15243

setxおよびほとんどすべてのWindowsコマンドラインコマンドは、特定の特殊文字の影響を受けます。それらの中にはスペース文字がありますが、エントリを区切るために使用される引用符もあります。

@ ajp15243で既に述べたように、2つの引用符の間のパスをロックすることでスペースを処理できます。しかし、パスがあり、スペースが含まれているためにそれらのパスがすでに引用符で囲まれている場合はどうなりますか?次に例を示します。

MY_PATHS="c:\Program Files\path1";"c:\Program Files(x86)\Path2"

この場合、setxを使用するときに、これらの内部引用符にエスケープ文字を配置する必要があります。そうしないと、混乱して、リストしたエラーが発生します。例えば:

setx -m MY_PATHS "\"c:\Program Files\path1\";\"c:\Program Files(x86)\Path2\""
2
user7565441

引用符を忘れたため、コマンドプロンプトでエラーが発生しています。次のように入力する必要があります。

setx OGRE_HOME “D:\Program Files\OgreSDK”

設定済みのすべての値を表示するには、次のいずれかを入力します。

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

OR

reg query HKEY_CURRENT_USER\Environment
2
Gene

@ ajp15243の回答 の補遺として。コマンドプロンプトまたはバッチファイルではなくPowerShellで同じことを行う場合は、次のように、エスケープされた二重引用符を先頭に付けてSETXを呼び出す必要があります。

$my_path = "%PROGRAMFILES%\MySQL\MySQL Server 5.7\bin\"
$hkcu_path = (Get-ItemProperty hkcu:\Environment).PATH + ";" + $my_path
SETX PATH "`"$hkcu_path" # note the leading escaped quote

ただし、そうすると、hkcu:\Environment\PATHの値にtrailing二重引用符が追加される可能性があるため、これも行う必要がある場合があります。

$dirty_path = (get-itemproperty hkcu:\Environment).PATH
$clean_path = $dirty_path -replace '"',''
SETX PATH $clean_path
1
Jthorpe