2017-01-11 4 views
0

私はすでに数時間この作業を行っていますが、何が欠落しているのか分かりません。基本的には、フォルダとサブフォルダ内のすべてのXMLファイルのリストを取得しています。これらのファイルをループして、別の文字列に置き換え、同じファイルに書き戻します。以下は、私が働いている行されます。回線が正しくエスケープされていない可能性があります

$destination = "C:\Temp\TestFolder" 
$newString = "#NewString#" 

Get-ChildItem '$($destination)*.xml' -Recurse | ForEach { 
    $currFile = $_.FullName; 
    (Get-Content $_ | ForEach { 
     $_ -Replace '#OldString#', '$($newString)' 
    }) | Set-Content -Path $currFile; 
} 
+1

こんにちは、問題は何ですか?エラーメッセージが表示されますか? – sodawillow

+0

エラーはありませんが、ファイル内で実際に行われた変更は表示されません。 –

+2

''$($ destination)\ *。xml''(バックスラッシュに気付く) –

答えて

3

問題は、あなたが実際に正しいディレクトリを指していないということです。

次のコマンドを実行すると:あなたは、単一引用符を使用している

Get-ChildItem '$($destination)*.xml' -Recurse 

$($destination)としようとしているように、一重引用符では文字列の拡張はできません。 PowerShellはこれを実行すると、$($ destination)というパスにあるファイルを実際に探していますが、これは存在しません。

代わりに、それらを二重引用符で置き換えるか、より良い方法で引用符を削除してください。

Get-ChildItem $destination\*.xml -Recurse 

最後に、あなたはその文字列のすべてのインスタンスを置き換えるためにFor-Eachループを使用する必要はありません。 Get-Contentを呼び出してreplaceを呼び出し、最終的に値をすべて1行に設定することができます。

関連する問題