2016-05-03 36 views
7

Sto usando -replace per cambiare un percorso dalla sorgente alla destinazione. Tuttavia non sono sicuro di come gestire il carattere \. Per esempio:Come gestire il carattere di barra rovesciata in PowerShell - sostituire le operazioni con le stringhe?

$source = "\\somedir" 
$dest = "\\anotherdir" 

$test = "\\somedir\somefile" 

$destfile = $test -replace $source, $dest 

Dopo questa operazione, $ destfile è impostato su

"\\\anotherdir\somefile" 

Qual è il modo corretto di fare questo per evitare il backslash tripla nel risultato?

risposta

11

provare quanto segue:

$source = "\\\\somedir" 

Eri corrispondendo solo 1 backslash in caso di sostituzione, che ti ha dato i tre \\\ all'inizio del tuo percorso.

La barra rovesciata è un carattere regex escape così \\ sarà visto come, match sola \ e non due \\. Come prima barra rovesciata è il carattere di escape e non usato per abbinare.

Un altro modo per gestire i backslash è utilizzare la funzione di escape regex.

$source = [regex]::escape('\\somedir') 
+1

'[regex] :: Escape()' è la soluzione più sicura, poiché gestirà anche altri caratteri speciali (come '+' o parentesi). –

+0

grazie, questo ha funzionato anche se ho usato la soluzione regex – user175562

+0

'' '[regex] :: Escape()' '' non funziona come previsto per i percorsi contenenti '.' –