2011-12-29 25 views
5

ait ayrıntılı çıktı biçimlendirme aşağıdaki komutu vardır:bir Kaldır-Öğe komutunun

Get-ChildItem $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse | Remove-Item -Verbose 

VS çözümün inşa klasöründen bazı dosyaları silmek için. Verbose anahtarını kullanıyorum, böylece hangi dosyaların silineceğini görebiliyorum. Düzgün çalışır ancak çıkışı çok ayrıntılı geçerli:

Sadece böyle bir şey görmek gerek
VERBOSE: Performing operation "Remove File" on Target "R:\Visual Studio 2010\Projects\SomeProject\SomeProject.Web.build\App_Readme\glimpse.mvc3.readme.txt". 
VERBOSE: Performing operation "Remove File" on Target "R:\Visual Studio 2010\Projects\SomeProject\SomeProject.Web.build\App_Readme\glimpse.readme.txt". 

:

Removing file \App_Readme\glimpse.mvc3.readme.txt". 
Removing file \App_Readme\glimpse.readme.txt". 
... 

Ben bir foreach ifadesi ve Yaz-Sunucu komutu ile yapabilirsiniz biliyorum ama inanıyorum ki bazı boru hatları ile yapılabilir. Herhangi bir fikir?

cevap

6

daha kolay görünüyor oldukça basittir: @ user978511 belirttiği gibi

Get-ChildItem $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse | foreach{ "Removing file $($_.FullName)"; Remove-Item $_} 

, ayrıntılı çıktı kullanıyor daha karmaşık:

$ps = [PowerShell]::Create() 

$null = $ps.AddScript(@' 
    Get-ChildItem $build_path ` 
     -Include *.bak, *.orig, *.txt, *.chirp.config ` 
     -Recurse | Remove-Item -Verbose 
'@) 

$ps.Invoke() 
$ps.Streams.Verbose -replace '(.*)Target "(.*)"(.*)','Removing File $2' 
+0

Bir boru hattında foreach kullanabileceğimi bilmiyordum. Teşekkürler. – lalibi

1

Öncelikle çıkması gereken mesajı değiştirebilmek için, o kadar kolay olmayan bir çıkış yapabilirsiniz. Bu sayfadaki cevaba başvurabilirsiniz: Çıkışı yakalamak için: Powershell Invoke-Sqlcmd capture verbose output . Oradan mesajı değiştirebileceğiniz üzerinde ve biçiminde gösteriyor ama foreach seçenekleri ForEach-Object kullanılması beni

3

PowerShell 3.0'da çıkış akışına Ayrıntılı akışı yazabilir (örn 4> & 1) ve daha sonra değiştirmek mesaj:

1

Bu, birkaç yıl geç kalmıştı ama bunu yaptığım gibi başka birisine yardım etmesine yardımcı olabilirdi, bu yüzden bunu yine de sağlayacağım.

Dosya silme işlemini dener ve ardından başarı veya başarısızlık hakkında rapor veririm. Aşağıya bakın:

$FileList = $build_path ` 
    -Include *.bak, *.orig, *.txt, *.chirp.config ` 
    -Recurse 

foreach ($File in $FileList) 
{ 
    Try 
    { 
     Remove-Item $File.FullName -Force -ErrorAction Stop 
     Write-Output "Deleted: $($File.Parent)\$($File.Name)" 
    } 
    Catch 
    { 
     Write-Output "Error deleting: $($File.Parent)\$($File.Name); Error Message: $($_.Exception.Message)" 
    } 
} 

Eğer yukarıdaki Yaz-Çıktı ile başlayan her satırın sonunda Tee-Object kullanabilirsiniz teselli ve bir dosyaya oturum açmak için her iki çıkış isteseydim.

| Tee-Object -FilePath $your_log_file -Append 
İlgili konular