2017-06-01 14 views
1

文字列が存在する場合は、このコードを変更します。それは完全に動作します。ただし、Server1文字列がファイルに存在しない場合でも、ファイルの変更日が変更されます。私が必要とするのは、文字列Server1が存在しない場合、無視してフォルダ内の残りのファイルに移動することです。修正日の援助

ここに誰も私がこれを達成する方法を知っていますか?

$filenames = Get-ChildItem "C:\test\*.dtsconfig" -Recurse | 
      select -Expand FullName 

foreach ($filename in $filenames) { 
    (Get-Content $filename) -replace 'Server1', 'Server2' | Set-Content $filename 
} 

答えて

0

は、それが実際に文字列「のServer1」が含まれている場合にのみファイルを書く:

$txt = Get-Content $filename 
if ($txt -like '*Server1*') { 
    $txt -replace 'Server1', 'Server2' | Set-Content $filename 
} 
-1
$fileNames = Get-ChildItem "C:\test\*.dtsconfig" -Recurse | Select -Expand FullName 

foreach ($filename in $filenames) { 
    $file = Get-Content $fileName 
    If ($file -like "*Server1*") { 
     Get-Content $fileName -replace 'Server1', 'Server2' | Set-Content $fileName 
    } 
} 

それが変更を行う前にチェックして、私はif文に追加しました。

+0

これは、 "Server1"という単語が含まれている行に他のテキストがない場合にのみ機能します。これは、* .dtsconfigファイルではそうではありません。 –

+0

ああ本当に本当です!私は同様の演算子を使用するように更新し、ワイルドカードを値の両側に含めました。 – Random206