如何 运行 使用 powershell 在系统变量 PATH 中的所有路径上测试路径?

How do I run test-path on all paths in the system variable PATH using powershell?

我想要 运行 测试路径或类似的东西来完成我在路径变量中查找无效路径的目的。

我做的主要是搜索

test path system variable for invalid entries

这没有找到任何东西。

这个例子只是为了展示我已经尝试过一些东西,但我真的不知道最好的命令是什么。

Test-Path -Path %Path% -PathType Any

更新

这些脚本使我能够找到一些错误的路径并修复它们

Mathias R. Jessen's 的基础上发表评论:

# Output those PATH entries that refer to nonexistent dirs.
# Works on both Windows and Unix-like platforms.
$env:PATH -split [IO.Path]::PathSeparator -ne '' |
  Where-Object { -not (Test-Path $_) }
  • 使用变量名的全大写形式 PATH[IO.Path]::PathSeparator as the separator to -split 使命令 cross-platform:

    • 在Unix-like平台环境变量名是case-sensitive,所以需要使用$env:PATH(all-upercase);相比之下,Windows 不是 case-sensitive,因此 $env:PATH 也在那里工作,即使名称的实际大小写是 Path.

    • 在 Unix-like 平台上,: 分隔 $env:PATH 中的条目,而在 Windows 上是 ; - [IO.Path]::PathSeparator return 是 platform-appropriate 字符。

  • -ne '' 过滤掉任何由 -split 操作产生的空标记,这些空标记可能来自变量值中直接相邻的分隔符(例如,;;) - 这样的空条目没有任何作用,可以忽略。

    • 注意:用一个数组作为LHS,比如returned by -split,PowerShell比较运算符比如-eq-ne 作为 过滤器 和 return 一个 匹配项数组 而不是一个布尔值 - 见 about_Comparison_Operators.
  • Where-Object 调用将输入目录路径过滤为 存在的目录路径,并输出它们(通过默认)。

    • 请注意,严格来说,Test-Path's first positional parameter is -Path, which interprets its argument as a wildcard expression
    • 为了完全稳健,需要 Test-Path -LiteralPath $_,以排除对碰巧包含 [ 作为通配符的文字路径的无意解释 - 尽管 $env:PATH 中的条目似乎不太可能。