PowerShell:将每个子目录添加到路径

PowerShell: Add every sub-directory to path

在 Windows10 上并通过 PowerShell,如何将每个子目录添加到 PATH 变量?

我为 Linux(例如 this one)改进了一些方法,并将它们 "adapting" 用于 PowerShell,我遇到了以下情况。

'$env:PATH = $env:PATH + (find C:\Users\appveyor\ -type d -printf "\";%pbuild\"")'

这会引发 The filename, directory name, or volume label syntax is incorrect.

更多上下文:我在 appveyor 上 运行 this,并尝试将 appveyor 下的每个路径(为清楚起见进行了简化)添加到路径中,例如 C:\Users\appveyor\*\build\

Linux 上的 find 命令与 Windows 上的 Find 命令非常不同。

在你的情况下,我会在 PowerShell 中使用 Get-ChildItem(也可以通过别名 gcidirls)到 return 目录对象数组,添加到当前路径转换为数组,然后 -join 它们与 Windows 路径分隔符,即分号 ;.

可能看起来像这样:

$env:PATH = (
    @($env:PATH) + (
        Get-ChildItem -LiteralPath 'C:\Users\appveyor' -Directory -Recurse
    )
) -join [System.IO.Path]::PathSeparator # <- that could just be a literal string ';'
$env:PATH = 
    @($env:PATH) + 
    [string]::join(
        ";", 
        (Get-ChildItem -LiteralPath "[PATH TO SEARCH]" -Directory -Recurse).fullname
    )

这基于@briantist 的建议;主要区别在于 join 语法。

要在 appveyor 上完成这项工作,请执行以下操作:

{ps:
    "$env:PATH = 
         @($env:PATH) + [string]::join(
             \";\", 
             (Get-ChildItem -LiteralPath \"[PATH TO SEARCH]\" -Directory -Recurse).fullname
    )"
}