#author("2021-05-09T09:29:40+09:00","default:ryuichi","ryuichi")
#author("2021-05-09T09:32:29+09:00","default:ryuichi","ryuichi")
* 環境変数Pathの操作 [#bb40eef4]

** Pathを見やすく一覧表示する [#l2648bc6]

 PS> $env:path -split ';'
 C:\Windows\system32
 C:\Windows
 C:\Windows\System32\Wbem
 C:\Windows\System32\WindowsPowerShell\v1.0\
 C:\Program Files\Git\cmd
 C:\Program Files\TortoiseSVN\bin
 C:\Program Files\TortoiseGit\bin
 C:\Program Files\nodejs\
 C:\Users\taro\AppData\Local\Microsoft\WindowsApps
 C:\Users\taro\AppData\Roaming\npm

** Pathにパスを追加する (一時的) [#i0340106]

 PS> $env:path += ";C:\PHP\bin"         # C:\PHP\binを追加
 PS> $env:path += ";$(pwd)\bin"         # カレントディレクトリ以下のbinをPathに加える
 PS> $env:path = "C:\PHP\bin;$env:path" # C:\PHP\binを先頭に追加
 PS> $env:path = "C:\PHP\bin;$env:path" # C:\PHP\binを先頭に追加。なお、$env:pathは変数展開される
 
 または
 
 PS> Set-Item -Path Env:Path -Value ($env:path + "C:\PHP\bin")
 PS> Set-Item -Path Env:Path -Value ("$($env:userprofile)\bin;" + $env:path) # $($env:userprofile)は変数展開される


- なお、このように追加した場合は、PowerShellを起動しなおすとその追加は消える。

*** 環境変数を展開してパス指定する [#f955f6bf]

 PS> Set-Item -Path Env:Path -Value ("$($env:userprofile)\bin;" + $env:path)

- '''$()'''で変数を展開できる(この場合、$env:userprofileが変数)

** Pathにパスを追加する (永続的) [#j046bbde]

 PS> [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\apps\vim", [EnvironmentVariableTarget]::Machine)  # (1)
 PS> [environment]::SetEnvironmentVariable("Path", $env:Path + ";%USERPROFILE%\bin", "User")                          # (2)

- システム環境変数のPathに指定する場合は(1)のように"Machine"を、ユーザー環境変数に指定する場合は(2)のように"User"を指定する
- (2)のように"%USERPROFILE%"と書くとPathを参照する際にパラメーター展開するので、"C:\Users\Taro\bin"のようにフルパスをハードコーディングするよりもポータビリティーが上がる

*** setxコマンドを使う [#g7809d23]

 PS> setx PATH "$env:path;C:\PHP\bin"            # ユーザー環境変数のPathを指定
 PS> setx PATH "$env:path;%USERPROFILE%\bin" /m  # システム環境変数のPathを指定

- SetEnvironmentVariable()はタイプするのが面倒なので、コマンドラインから実行するにはsetxコマンドを使った方が簡単

** PowerShellプロファイルでPathを指定する [#b186ea4c]

 PS> notepad.exe $profile     # メモ帳でPowerShellプロファイルを開く
 -----
 $env:path += ";C:\PHP\bin"
 -----

- SetEnvironmentVariable()やsetxコマンドはレジストリのPathを書き換えるけれども、そもそもコマンドラインからの操作は間違えるとPathを壊しかねないので、普通にコントロールパネルからGUIで設定した方が無難と思う
- そこで、PowerShellからしか使わないコマンドなら、PowerShellのプロファイルファイルでPathを指定する方が管理しやすいと思う

** Pathレジストリ情報の確認 [#v4886a5c]

 Get-ItemProperty -Path "HKCU:Environment" -Name Path
 Get-ItemProperty -path "HKLM:\System\CurrentControlSet\Control\Session Manager\Environment" -Name Path

** 参考 [#f13b77c1]

https://stackoverflow.com/questions/714877/setting-windows-powershell-path-variable
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-7.1
- https://stackoverflow.com/questions/714877/setting-windows-powershell-path-variable

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS