2016-11-03 6 views
2

を通じて、私はフォルダに関係なく、すべてのファイルタイプをループしようとし、ユーザーが入力した1文字列を変更しています。..ループが別のファイル拡張子を持つフォルダ内のすべてのファイル

私がすることができます..しかし、ファイル拡張子のみの1種類と、以下のコードで、今これを行う

これは私のコードです:

$NewString = Read-Host -Prompt 'Input New Name Please' 
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition 

$InputFiles = Get-Item "$scriptPath\*.md" 

$OldString = 'SolutionName' 
$InputFiles | ForEach { 
(Get-Content -Path $_.FullName).Replace($OldString,$NewString) | Set-Content -Path $_.FullName 
} 

echo 'Complete' 

私に関係なく、ファイルをループ、拡張子はどうすればよいですか? それはmd、txt、またはcshtmlなどであっても、指示どおりに文字列を置き換えます。

答えて

2

フォルダ内のすべてのファイルを取得するには、Get-ChildItemを利用できます。 -Recurseスイッチを追加して、サブフォルダ内のファイルもインクルードします。

など。あなたはこれが最初のプロンプトが表示されたら、ユーザーが入力したものと$OldStringに与えられた値を交換し、最終的にファイルを保存し、$pathで定義されたフォルダ内のすべてのファイルを取得します。この

$path = 'c:\tmp\test' 
$NewString = Read-Host -Prompt 'Input New Name Please' 
$OldString = 'SolutionName' 

Get-ChildItem -Path $path | where {!$_.PsIsContainer} | foreach { (Get-Content $_).Replace($OldString,$NewString) | Set-Content -Path $_.FullName } 

のようなスクリプトを書き換えることができます。

注:スクリプトは、ファイルの内容が変更されているかどうかに関しては何の違いもありません。これにより、日付を変更したすべてのファイルが更新されます。この情報が重要な場合は、ファイルを変更して保存する前に、ファイルに$OldStringが含まれているかどうかをチェックする必要があります。

+0

フォルダを壊そうとするとエラーが表示されます。フォルダには触れないでください。 powershellファイルが入っているフォルダ内のファイルのみに触れる必要があります。 – andrelange91

+0

返された結果の中にファイル(フォルダなし)のみが存在するようにスクリプトを更新しました。 – kim

+0

それは動作します:Dありがとう^^ – andrelange91

関連する問題