11

Windows XPでPowershellを使用していて、次のようなコマンドを作成しようとしています。

1. read all .bat,.cfg, and .config files
2. replace a string (it's actually the path...these files were all moved)
3. overwrite the existing files with the new one (same name, same location, etc.)

私はPowershellユーザーではありませんが、次のことをうまくまとめることができました。

gci -r -include "*.bat","*.config","*.cfg" 
    | gc 
    | foreach { $_ -replace "D:","C:\path" } 
    | sc ??.FullName

私は#1と#2の面倒を見たとかなり確信していますが、#3(scで参照できる変数にファイル名を渡す)を理解するのに問題があります。何かご意見は?また、追加情報が必要な場合はお知らせください。

編集:

私はなんとか答えを見つけることができました(以下を参照)が、これを行うためのより良い方法はありますか?

4

3 に答える 3

13

試す:

gci -r -include "*.bat","*.config","*.cfg" |
 foreach-object { $a = $_.fullname; ( get-content $a ) |
 foreach-object { $_ -replace "D:","C:\path" }  | 
set-content $a }
于 2012-07-06T20:38:10.533 に答える
3

すべてのファイルで上記のコードを使用する場合は、このコードを使用してください。一番上の行に注意してください。

gci -r *.* |
foreach-object { $a = $_.fullname; ( get-content $a ) |
foreach-object { $_ -replace "master81","master" }  | 
set-content $a }

省略した場合、*.*フォルダを編集しようとしているためにエラーが発生する可能性があります。

[Get-Content]、UnauthorizedAccessException

于 2019-07-23T03:00:37.043 に答える
0

追加の変数が必要であることに気づきました。これを行う1つの方法は、forループをコマンドの外側の部分に統合することです。私が使用した:

foreach ($f in gci -r -include "*.bat") 
    { (gc $f.fullname) |
       foreach { $_ -replace "D:","C:\path" }  |
       sc $f.fullname 
    }
于 2012-07-06T20:37:27.747 に答える