2010-02-25 33 views
9

en mi secuencia de comandos Verifico algunos archivos y me gustaría reemplazar una parte de su ruta completa con otra cadena (ruta unc del recurso compartido correspondiente).Reemplazar la ruta en la cadena Powershell

Ejemplo:

$fullpath = "D:\mydir\myfile.txt" 
$path = "D:\mydir" 
$share = "\\myserver\myshare" 
write-host ($fullpath -replace $path, $share) 

La última línea me da un error desde $ camino no no contiene un patrón válido para las expresiones regulares.

¿Cómo puedo modificar la línea para que el operador de reemplazo maneje el contenido de la variable $ path como un literal?

Gracias de antemano, Kevin

Respuesta

23

Uso [regex]::Escape() - método muy práctico

$fullpath = "D:\mydir\myfile.txt" 
$path = "D:\mydir" 
$share = "\\myserver\myshare" 
write-host ($fullpath -replace [regex]::Escape($path), $share) 

También podría usar mi filtro rebase hacerlo, mira Powershell: subtract $pwd from $file.Fullname

+0

Muchas gracias. Demasiado fácil :-) – bitfrickler

+0

:) Cuando no sabía acerca de este método, el código era complicado (escapando caracteres sensibles a la expresión regular a mano). Este método vale la pena;) – stej

9

El método $variable -replace $strFind,$strReplace entiende expresiones regulares patrones.
Pero el método $variable.Replace($strFind,$strReplace) no. Entonces prueba este.

PS > $fullpath.replace($path,$share) 

\ myserver \ miRecursoCompartido \ miarchivo.txt

Cuestiones relacionadas