2012-09-12 20 views
17

Me gustaría convertir una ruta a una ruta relativa en un script de PowerShell. ¿Cómo hago esto usando PowerShell?¿Cómo convertir la ruta absoluta a la ruta relativa en PowerShell?

Por ejemplo:

Path to convert: c:\documents\mynicefiles\afile.txt 
Reference path: c:\documents 
Result:   mynicefiles\afile.txt 

Y

Path to convert: c:\documents\myproject1\afile.txt 
Reference path: c:\documents\myproject2 
Result:   ..\myproject1\afile.txt 

Respuesta

38

he encontrado algo integrado, Resolve-Path:

Resolve-Path -Relative 

Esto devuelve la ruta relativa a la ubicación actual. Un uso simple:

$root = "C:\Users\Dave\" 
$current = "C:\Users\Dave\Documents\" 
$tmp = Get-Location 
Set-Location $root 
Resolve-Path -relative $current 
Set-Location $tmp 
+14

En lugar de usar una variable temporal, también puede usar Push-Location y Pop-Location para establecer la ubicación y luego volver a su valor original. La misma solución básica pero sin la variable temporal. –

1

Get-RelativePath parece que hay una manera de hacerlo.

+0

Pero parece terriblemente complicado y lento. ¿No hay una mejor manera de hacerlo? –

+1

Complicado lento y con errores. –

+0

El enlace ya no está activo – Honzajscz

-1

Aquí es un enfoque alternativo

$pathToConvert1 = "c:\documents\mynicefiles\afile.txt" 
$referencePath1 = "c:\documents" 
$result1 = $pathToConvert1.Substring($referencePath1.Length + 1) 
#$result1: mynicefiles\afile.txt 


Y

$pathToConvert2 = "c:\documents\myproject1\afile.txt" 
#$referencePath2 = "c:\documents\myproject2" 
$result2 = "..\myproject" + [regex]::Replace($pathToConvert2 , ".*\d+", '') 
#$result2:   ..\myproject\afile.txt 

Nota: en la segunda trayectoria caso ref no se utilizó.

+0

Creo que ha malentendido los dos ejemplos. Quiero un enfoque para resolver ambos. –

+0

Sí, he entendido mal su ejemplo, ya que apunta a la ruta absoluta del archivo. – yantaq

+0

No es el OP, pero esto es lo que estaba buscando para resolver mi problema. Gracias –

Cuestiones relacionadas