2012-07-06 17 views
7

Tôi đang sử dụng Powershell trên Windows XP và đang cố gắng để viết một lệnh đó sẽ:Powershell: Đệ quy Thay String trong Chọn Sub-files của một thư mục

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

Tôi không phải là một người sử dụng Powershell, nhưng tôi có quản lý để từng phần sau với nhau:

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

tôi khá chắc chắn rằng tôi đã đưa về chăm sóC# 1 và # 2, nhưng đang gặp khó khăn tìm ra # 3 (đi qua các tên tập tin để biến mà có thể được tham chiếu trong sc). Có suy nghĩ gì không? Ngoài ra, hãy cho tôi biết nếu bạn cần bất kỳ thông tin bổ sung nào.

EDIT:

tôi quản lý để tìm ra một câu trả lời (xem dưới đây), nhưng là có một cách tốt hơn để làm điều này?

Trả lời

9

thử:

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

Cảm ơn! Nó hoạt động, mặc dù bạn đã bỏ lỡ một khung sau "C: \ path". –

+0

@DavidC Yep! lỏng nó định dạng câu trả lời của tôi! Bây giờ là cố định! –

0

Tôi nhận ra rằng tôi cần thêm một biến. Một cách để làm điều này là tích hợp một vòng lặp for vào phần bên ngoài của lệnh. Tôi đã sử dụng:

foreach ($f in gci -r -include "*.bat") 
    { (gc $f.fullname) | 
     foreach { $_ -replace "D:","C:\path" } | 
     sc $f.fullname 
    } 
Các vấn đề liên quan