2017-05-14 87 views
0

我有一個文件夾中的1000個文件和另一個文件夾中的類似命名文件。目標是在兩個文件夾中具有相同的文件名,但保留文件擴展名。將文件夾內容與另一個文件夾進行比較並刪除

我想運行一個腳本來比較每個文件夾的內容(除了它們的文件擴展名),如果它們不在文件夾中如果在folder1中有一個名爲BILL的文件,但不在folder2中,它將刪除其中一個文件文件夾。

實施例:

  • C:\ TempFolder1 \ RandomFile1
  • C:\ TempFolder2

如果RandomFile1不存在TempFolder2它刪除它從TempFolder1,反之亦然。

回答

1

這裏你去...這個腳本假設你不是通過子文件夾遞歸地查看,忽略任何父文件夾下的目錄......它通過拉動文件列表,然後比較每個文件夾子文件'BaseName與基本名稱從其他列表中,然後除去那些獨特:

$folder1 = "C:\TempFolder1" 
$folder2 = "C:\TempFolder2" 

$files1 = Get-ChildItem $folder1 | Where-Object {$_.PsIsContainer -eq $false} 
$files2 = Get-ChildItem $folder2 | Where-Object {$_.PsIsContainer -eq $false} 

# Remove unique file baseNames from $folder1 that don't exist in $folder2 
$files1 | Where-Object {$files2.BaseName -notcontains $_.BaseName} | Remove-Item -Force 

# Remove unique file baseNames from $folder2 that don't exist in $folder1 
$files2 | Where-Object {$files1.BaseName -notcontains $_.BaseName} | Remove-Item -Force 
+0

我會嘗試,出來的時候我就可以了,它看上去很不錯,謝謝! 在每個文件夾中有1000個沒有子目錄的文件,所以應該沒問題。 如果我將它放在我想應用它的文件夾中並使用%〜DP0,其中$ folder1是?還是我必須指定完整的位置? –

+0

由於您的目標是2個文件夾,因此您最好使用完整路徑來實現IMHO的一致性。它肯定有可能在它所在的文件夾的上下文中運行,但是仍然需要爲第二個文件夾編寫完整路徑,並且您需要添加排除規則,以便腳本本身不會被清除...更容易將其保存在中央腳本文件夾中,然後在運行前根據需要更新路徑 –

+0

我測試過該腳本並且它可以工作。真的很感謝你的時間!不幸的是,它對我來說並不自然,所以我不會流利。頂級男人,高五! –

相關問題