Test-Path 是不是接受相对路径?

Posted

技术标签:

【中文标题】Test-Path 是不是接受相对路径?【英文标题】:Does Test-Path accept Relative Paths?Test-Path 是否接受相对路径? 【发布时间】:2021-12-23 08:46:52 【问题描述】:

使用Test-Path cmdlet 时,相对路径似乎可以工作,但我找不到任何支持这一点的官方文档。

如果它们受支持:

它们是否在 Powershell 2.0 中工作? 它们相对是哪个路径? 脚本路径?执行路径?其他地方? 如何更改根相对路径? (例如其他东西的脚本路径)

我有限的测试表明它与脚本路径(脚本所在的文件夹)有关。总是这样吗?如果是这样,那么我可以可靠地使用Join-Path 来更改该路径。

【问题讨论】:

在 PoSh 中,相对路径是相对于 PoSh 认为是当前位置的位置。这可以是脚本开始的位置,脚本开始时操作系统当前位置的位置,或者脚本设置当前位置的位置。 ///// 与所有脚本或编程语言一样...如果可以避免,请不要使用相对路径。_ 歧义是危险的。 我建议查看以下有关 PATH 语法的文档。这些文件似乎没有回到 2.0,至少我可以很快找到。 docs.microsoft.com/en-us/powershell/module/… 至于“当前工作地点”,查看文档。 docs.microsoft.com/en-us/powershell/module/… 最安全的方法是使用$PSScriptRoot等自动变量。 【参考方案1】:

是的,Test-Path 接受相对路径。

正如典型,相对路径被解释为相对于会话的当前location,这反映在automatic $PWD variable并在Get-Location 的输出中。

当前位置也可以表示为.

请注意,虽然位置通常是文件系统目录,但 PowerShell 的 provider model 也允许以类似文件系统的方式呈现其他数据存储,例如 Windows 上的注册表,例如(驱动器HKCU:HKLM:

因此,以下命令是等价的:

# Test if an item named 'foo' exists in the current location.
# If the current location is a *file-system* location, this
# could be either a file or a directory. 
# Add:
#  -PathType Container to test only for a directory (container item)
#  -PathType Leaf to test only for a file (leaf item)
Test-Path foo
Test-Path .\foo
Test-Path (Join-Path $PWD foo)

正如Lee Dailey 所说,在 scripts 中最好使用 full 路径 - 除非您事先仔细控制当前位置,但请注意更改当前位置(使用Set-LocationPush-Location)会更改它会话范围,因此最好在退出脚本之前恢复之前的位置,您可以通过配对@ 987654341@ / Pop-Location 来电。


相比之下,如果您需要测试相对于您的脚本位置的路径,请使用automatic $PSScriptRoot variable,正如Santiago Squarzon 建议的那样: p>

# Test if a file or directory named 'foo' exists in the directory
# in which the enclosing script is located.
Test-Path (Join-Path $PSScriptRoot foo)

【讨论】:

以上是关于Test-Path 是不是接受相对路径?的主要内容,如果未能解决你的问题,请参考以下文章

什么相对路径?什么是绝对路径?

将 JasperReports 与相对路径一起使用

java中如何判断web工程中图片的绝对路径是不是存在

C# 中是不是存在一种方法来获取给定两个绝对路径输入的相对路径? [复制]

Phonegap 是不是支持根相对路径?最佳实践是啥?

PHP 是不是包含相对于文件或调用代码的路径?