将文件夹内容与另一个文件夹进行比较并删除

问题描述:

我有一个文件夹中的1000个文件和另一个文件夹中的类似命名文件。目标是在两个文件夹中具有相同的文件名,但保留文件扩展名。将文件夹内容与另一个文件夹进行比较并删除

我想运行一个脚本来比较每个文件夹的内容(除了它们的文件扩展名),如果它们不在文件夹中如果在folder1中有一个名为BILL的文件,但不在folder2中,它将删除其中一个文件文件夹。

实施例:

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

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

这里你去...这个脚本假设你不是通过子文件夹递归地查看,忽略任何父文件夹下的目录......它通过拉动文件列表,然后比较每个文件夹子文件'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

我测试过该脚本并且它可以工作。真的很感谢你的时间!不幸的是,它对我来说并不自然,所以我不会流利。*男人,高五! –