2012-07-06 16 views
7

bir Directory Seç Alt dosyalarında String değiştirin:Powershell: yinelemeli Windows XP üzerinde PowerShell kullanıyorum ve irade bir komut yazmaya çalışıyorum

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.) 

Ben bir PowerShell kullanıcı değilim, ama ben

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

Ben 1. ve 2., halledilir ettik eminim ama 3. endam sorun yaşıyorum (olabilmektedir değişkene dosya adı geçen: birlikte aşağıdaki parça parça başarmış sc) 'de başvurulan. Düşüncesi olan var mı? Ayrıca, herhangi bir ek bilgiye ihtiyacınız varsa bildirin.

DÜZENLEME:

bir cevap (aşağıya bakınız) çalışmak başardı ama bunu yapmak için daha iyi bir yolu var mı?

cevap

9

deneyin:

gci -r -include "*.bat","*.config","*.cfg" | 
foreach-object { $a = $_.fullname; (get-content $a) | 
foreach-object { $_ -replace "D:","C:\path" } | 
set-content $a } 
+0

teşekkürler! Çalışır, "C: \ yol" dan sonra bir köşeli ayraç cevapsız. –

+0

@DavidC Yep! cevabımı biçimlendiriyorsun! Şimdi düzeltildi! –

0

Ekstra değişkene ihtiyacım olduğunu anladım. Bunu yapmanın bir yolu, bir for-döngüsü komutun dış kısmına entegre etmektir. Ben kullandı:

foreach ($f in gci -r -include "*.bat") 
    { (gc $f.fullname) | 
     foreach { $_ -replace "D:","C:\path" } | 
     sc $f.fullname 
    }