![Windows PATH/环境变量管理的最佳实践?](https://linux22.com/image/1242494/Windows%20PATH%2F%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%AE%A1%E7%90%86%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%EF%BC%9F.png)
现在,情况真是一团糟。每次我安装一个在命令行中执行一些琐碎操作的新程序时,我都必须将其添加到路径中。事实上,我正在使用 Ruby 进行开发,甚至 gem(插件/扩展)有时也有自己的可执行文件,并且存储在不同的文件夹中,最终我也必须为每个应用程序添加多个路径。我已经到了在 PATH 环境变量中推送 30 条路径的地步。
我谨慎地将它们复制并粘贴到某个主文件夹并设置路径;感觉不对。我是否错过了既定的最佳实践?
答案1
我的文件夹中包含许多小型独立实用程序%UserProfile%\Apps
,例如存档程序等。此外,还有一些我编写并经常使用的批处理文件,它们位于 中%UserProfile%\Batches
。对于其余文件,我只需将它们添加到 中PATH
,这可以通过安装程序或使用
setx PATH "%PATH%;%CD%"
从相应的目录中获取。如果内容太长(环境变量有长度限制),路径数量可能只会成为问题。
您可以(有时我会这样做)为此类程序编写小型包装批处理文件。简单地将可执行文件复制/硬链接/符号链接到另一个目录可能在 Windows 上不起作用,但您可以轻松创建一个批处理文件,例如为程序 Foo 创建批处理文件:
@"%ProgramFiles%\Foosoft Foo\foo.exe" %*
然后您可以将存储这些批处理文件的文件夹添加到您的PATH
.
答案2
答案3
现在大多数 Windows 计算机都附带 PowerShell,因此我在用户配置文件中使用了许多 sal/Set-Alias 命令,因此如果某个应用程序只有一两个我使用的应用程序,我将只为这两个命令创建别名,而不是将整个应用程序文件夹添加到路径中。示例包括 SQL Management Studio、Notepad++、TFS Power Tools(命令行工具,tfpt.exe)。我还会在计算机之间复制我的用户配置文件,这样我就可以在创建别名之前检查当前计算机上是否存在该应用程序(如果未安装应用程序,有时会发出警告)。
filter ctQuoteString { "`"$_`"" }
filter ctResolvePath { Resolve-Path $_ | select -ExpandProperty Path | ctQuoteString } # used in Edit.ps1
$nppExe = "C:\Program Files (x86)\Notepad++\notepad++.exe"
if ((Test-Path variable:\nppExe) -and (Test-Path $nppExe)) {
function EditNotepadPP {
param ([parameter(ValueFromPipelineByPropertyName=$true)][Alias("FullName","FileName")]$Path)
begin { if (! $nppExe) { throw 'variable $nppExe is not defined' } }
process {
$Path | ctResolvePath | % { # ctResolvePath will get full path and surround with quotes
& $nppExe $_
}
#AddEditHistory $Path #if you need detailed time tracking, might help to create a log what files you're editting
}
}
Set-Alias npp EditNotepadPP
}
# I have similar functions for other apps.
Set-Alias vs EditVS
Set-Alias tfe EditTFCheckout