获取当前目录中子文件夹中文件的相对路径

blu*_*utt 45 powershell powershell-ise powershell-2.0

有没有直接的方法(通过使用cmdlet或.NET类)来获取给定路径中子文件夹中文件的相对路径?

例如,当前文件夹是C:\MyScript并没有所谓的子文件夹Data与文件Test.txt,所以我想看到Data\Test.txt的,而不是C:\MyScript\Data\Test.txt

Aar*_*sen 82

Resolve-Pathcmdlet都具有一个-Relative参数,将相对于当前目录的路径返回:

Set-Location C:\MyScript
$relativePath = Get-Item Data\Test.txt | Resolve-Path -Relative
Run Code Online (Sandbox Code Playgroud)

  • @VinyJones我还没有找到方法,但我使用 Push-Location 和 Pop-Location 作为解决方法来临时将当前目录设置为其他基本目录,以便获取相对于该目录的路径。有点笨重,但对我有用。 (6认同)
  • @VinyJones是的,如果使用.net core/.net标准,你可以使用.net方法:`[System.IO.Path]::GetRelativePath('c:\temp', 'c:\windows')` 。https://learn.microsoft.com/en-us/dotnet/api/system.io.path.getrelativepath?view=net-6.0&viewFallbackFrom=netframework-2.0。对于 .net 框架,您需要自行推出:请参阅 /sf/ask/19298261/ (3认同)
  • 是否可以定义另一个基目录而不是当前目录? (2认同)
  • @VinyJones 他们最终在 Powershell 7.4.0 中添加了一个 `RelativeBasePath` 选项,因此您不再需要使用 .NET:`Resolve-Path -Path "C:\Temp" -RelativeBasePath "C:\Windows"` (2认同)

小智 5

如果该目录不存在,或者基目录应与当前工作目录不同,则可以使用 .NET 方法[IO.Path]::GetRelativePath(String from, String to)