2011-08-24 35 views
7

Bu powershell komutunu çağırmak ve hata almak. Beni delirtiyor. Ben son bölümünü kaldırırsanız, ben dosyaların bir listesini almakDosyaları yeniden adlandırma Powershell

You cannot call a method on a null-valued expression. 
At line:1 char:140 
+ get-childitem -recurse ./ *NYCSCA* | where-object { $_.Name -like "*NYCSCA*" } | select FullName | rename-item $_ -n 
ewname $_.Name.Replace <<<< (" ","_") -whatif 
    + CategoryInfo   : InvalidOperation: (Replace:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

: Burada

Prompt> get-childitem -recurse ./ *NYCSCA* | where-object { $_.Name -like 
"*NYCSCA*" } | rename-item $_ -newname $_.Name.Replace(" ","_") -whatif 

yanıttır. Herhangi bir ipucu? Açıkçası, henüz powershell yemedim.

Not: Bunu süper kullanıcılara göndermeyi denedim, ancak site sürekli olarak başarısız oluyor - bu kesin soruyu eklememe izin vermeyeceğim.

Burada büyük ölçüde basitleştirilmiştir. Bu klasik örneği işe bile alamıyorum.

gci *NYCSCA* | ren $_ ($_.Name).Replace("foo","bar") 

Teşekkür ederim @JNK,% yaptı.

gci -recurse | where-object{ $_.Name -like "*NYCSCA*"} | %{rename-item $_.FullName $_.FullName.Replace("NYCSCA","SDUSD") } 
+0

bkz http://stackoverflow.com/a/21614001/8479 – Rory

cevap

7

Sana foreach-nesne gerek:

get-childitem -recurse ./ *NYCSCA* | where-object { $_.Name -like 
"*NYCSCA*" } | % {rename-item $_ -newname $_.Name.Replace(" ","_") -whatif} 

borulu dizi set olarak yeniden adlandırılamaz ilgilendiğiniz durumda ben gerekli çözüm budur.

+0

hayır aynı: Burada –

+0

@Daniel - yeni yanıtı dene – JNK

+0

Evet! İşte bu - teşekkürler. Setlere karşı öğeleri daha iyi anlamalıyım. Ama bu harika! –

5

Get-ChildItem -Filter *NYCSCA* -Recurse | 
Where-Object {!$_.PSIsContainer} | 
Rename-Item -NewName { $_.Name.Replace(' ','_') } -WhatIf 

(satır sonları açıklık için eklenen Edit) olan dosyaları yeniden adlandırmak için basitleştirilmiş versiyonu hata. Yukarıda basitleştirilmiş bir versiyon ekledim.

+1

Buradaki gerçek fark, '$ _' referansına izin vermek için '' ... '' argümanında '' ... '' kod bloklarını kullanmaktadır (bu yüzden foreach nesnesi de bir çözüm sunmaktadır. – Richard

+0

Doğru, foreach- nesne iş yapar, ancak ek yük ekler (ve daha yavaştır) –

+0

İlginç, bu nedenle, yeniden adlandırma öğesinin argümanlarını foreach'ın bir dizi işleminde çağrılan yeniden adlandırma öğeleri yerine bir dizi olarak ele almasını sağlar. –

İlgili konular