2017-12-04 4 views
0

文字列を検索して置き換えて出力しようとしています。私は構文が正しいと信じていますが、何らかの理由でそれが機能していません。なぜ誰かが見つけたり、これも可能ですか?一緒に使用する置換方法選択文字列が機能しない

$DesiredTimeoutTime = '<Settings maxTimeout="04:00:00" />' 
$path = "C:\Windows\Settings.log" 

$currentTimeoutTime = Select-String -Path $path -SimpleMatch '<Settings maxTimeout=' -CaseSensitive 
Write-Host $currentTimeoutTime 
(Get-Content $path).Replace((Select-String -Path $path -SimpleMatch '<Settings maxTimeout="'), $DesiredTimeoutTime) | out-file $path 

変更を保存していない行とパスが見つかりました。

ありがとうございました

答えて

3

あなたは物事をオーバーコンプリートしています。単に適切なregular expression-replace演算子を使用します。

$DesiredTimeoutTime = '04:00:00' 
(Get-Content $path) -replace '(?<=<Settings maxTimeout=")[^"]*', $DesiredTimeoutTime | 
    Set-Content $path 

(?<=...)は、基本的には、「このパターンが先行している何かを探して」を意味し、positive lookbehind assertionです。

+0

回答ありがとうございました!私はPSに新しいので、あなたは答える時間をとって教えてくれて大変感謝しています。これで問題は解決します。ありがとう! – Kangaroo

+0

'[^"] * 'が何であるか説明できますか? – Kangaroo

+1

[記事](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular)を読むことをお勧めします。 -expression-language-quick-reference#character-classes)@Ansgar linked(この特定の質問のために読んでもよいかもしれないアンカーを参照しましたが、時間をかけて完全かつ注意深く読んでください) – Clijsters

関連する問題