1
$FilePath = 'Z:\next\ResourcesConfiguration.config'
$oldString = 'Z:\next\Core\Resources\'
$NewString = 'G:\PublishDir\next\Core\Resources\'

どんなアイデアでも、サインインしている文字列をどのように置き換えることができますか。設定ファイルのパスを変更したい。単純なコードはこれには機能しません。フォローしてみました

(Get-Content $original_file) | Foreach-Object {
 $_ -replace $oldString, $NewString
 } | Set-Content $destination_file
4

3 に答える 3

5

Replace演算子は正規表現パターンを取り、「\」は正規表現で特別な意味を持ち、エスケープ文字です。各バックスラッシュを2倍にする必要があります。それ以上の場合は、エスケープメソッドを使用します。

$_ -replace [regex]::escape($oldString), $NewString

または、文字列を受け取り、特別な注意を必要としないstring.replaceメソッドを使用することもできます。

$_.Replace($oldString,$NewString)
于 2012-09-19T10:44:36.743 に答える
0

これは機能します:

$Source = 'Z:\Next\ResourceConfiguration.config'
$Dest = 'G:\PublishDir\next\ResourceConfiguration.config'
$RegEx = "Z:\\next\\Core\\Resources"
$Replace = 'G:\PublishDir\next\Core\Resources'

(Get-Content $FilePath) | Foreach-Object { $_ -replace $RegEx,$Replace } | Set-Content $Dest

試行が機能しなかった理由は、-replace最初のパラメーターが正規表現であると想定しているためです。簡単に言うと、ディレクトリパスの円記号をエスケープする必要があります。これは、バックスペース()を追加することで実行され\\ます。2番目のパラメーターは文字列であることが想定されているため、そこで変更を行う必要はありません。

于 2012-09-19T10:52:08.943 に答える
0

これを試して、

$oldString = [REGEX]::ESCAPE('Z:\next\Core\Resources\')

検索するには、パターンをエスケープする必要があります。

于 2012-09-19T10:43:20.077 に答える