2016-03-28 21 views
1

'u değiştirin Programım için, yalnızca bu dizinin klasör ve alt klasörlerinde .dll dosya adlarını yakalayan bir döngü kullanmak istiyorum. Daha sonra, aynı dosya adıyla .dll için belirtilen bir konum/yol arar ve varsa, onu değiştirir. Şimdiye kadar programım tüm dosyaları bir konumdan diğerine kopyalar ve kopyalandıktan sonra yukarıda belirtilenlere ihtiyaç duyulur.Powershell, klasör üzerinden döngü, dosya adlarına ve yerine göre arama yapın ve ardından

En büyük sorunum olarak belirlendi. Dosya adlarına göre, belirli bir konumdaki bir döngüde nasıl arama yapıyorsunuz?? Sunucuları ve diğer sürücüleri kullanarak doğru yolları koymadan önce, kod yerel olarak rastgele yerlerde bulunur.

#sets source user can edit path to be more precise 

$source = "C:\Users\Public\Music\Sample Music\*" 

#sets destination 

$1stdest = "C:\Users\User\Music\Sample Music Location" 

#copies source to destination 

Get-ChildItem $source -recurse | Copy-Item -destination $1stdest 

#takes 1stdest and finds only dlls to variable 

#not sure if this is right but it takes the .dlls only, can you do that in the foreach()? 

Get-ChildItem $1stdest -recurse -include "*.dll" 

cevap

1

Burada geri Yollarınızı düzenlemeniz gerekir. Ayrıca, $1stDest hedef klasördeki dosyaların listesini sıralamak değiştirildi unutmayın, gidin.

Mantık, tüm dosyaları $ kaynağından geçirir ve $1stDest'da bir eşleşme arar. Bazıları bulursa, bunları $OverWriteMe'da saklar. Kod, üzerine yazılacak her dosyaya adım atar ve kopyalar.

Yazdığı gibi, -WhatIf kullanır, bu yüzden çalıştırmadan önce ne olacağını bir önizleme olacak. Gördükleriniz isterseniz, yukarıdaki kod ile bir hata var çizgisi 15.

$source = "c:\temp\stack\source\" 

#sets destination 

$1stdest = get-childitem C:\temp\stack\Dest -Recurse 

#copies source to destination 

ForEach ($file in (Get-ChildItem $source -recurse)){ 

    If ($file.BaseName -in $1stdest.BaseName){ 
     $overwriteMe = $1stdest | Where BaseName -eq $file.BaseName 
     Write-Output "$($file.baseName) already exists @ $($overwriteMe.FullName)" 
     $overwriteMe | ForEach-Object { 
      copy-item $file.FullName -Destination $overwriteMe.FullName -WhatIf 
      #End of ForEach $overwriteme 
      } 

     #End Of ForEach $file in ... 
     } 


} 

çıkış

1 already exists @ C:\temp\stack\Dest\1.txt 
What if: Performing the operation "Copy File" on target "Item: C:\temp\stack\source\1.txt Destination: C:\temp\stack\Dest\1.txt". 
5 already exists @ C:\temp\stack\Dest\5.txt 
What if: Performing the operation "Copy File" on target "Item: C:\temp\stack\source\5.txt Destination: C:\temp\stack\Dest\5.txt". 
+0

üzerinde -WhatIf kaldırın. "'-' operatörünün sağ tarafında bir değer ifadesi sağlamalısınız." Bunu düzeltmek için nasıl giderim? – user6124417

+0

Tekrar deneyin ve kopyalayın, sanırım daha önce fazladan bir yerim vardı. Eğer hala başarısız olursa, bu iş parçacığına tam kodunuza bir pastebin bağlantısı ile cevap verin ve bunu çözmenize yardımcı olacağım. – FoxDeploy

İlgili konular