2016-05-03 51 views
7

-replaceを使用して、ソースから宛先へのパスを変更しています。しかし、私は\文字を処理する方法がわかりません。例えば:この操作の後PowerShell-replace文字列操作でバックスラッシュ文字を処理する方法は?

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

$test = "\\somedir\somefile" 

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

は、$のdestfileが

"\\\anotherdir\somefile" 

に設定されている結果でトリプルバックスラッシュを避けるために、これを行うための正しい方法は何ですか?

答えて

11

は、以下のことを試してみてください。

$source = "\\\\somedir" 

交換するときにのみ、1つのバックスラッシュを照合して、あなたのパスの開始時に次の3つの\\\を与えました。

バックスラッシュはそう\\が、試合唯一の\なく2 \\として見られるだろうregexエスケープ文字です。最初のバックスラッシュはエスケープ文字であり、一致するためには使用されません。

バックスラッシュを処理するもう1つの方法は、regexエスケープ機能を使用することです。

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

'[regex] :: Escape()'は、他の特殊文字( '+'や括弧など)を扱うので、より安全なソリューションです。 –

+0

ありがとう、これは私が正規表現の解決策を使ってもうまくいきました – user175562

+0

'' [regex] :: Escape() '' 'は'。 'を含むパスに対して期待どおりに動作しません。 –