将文件夹内容与另一个文件夹进行比较并删除
问题描述:
我有一个文件夹中的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
我会尝试,出来的时候我就可以了,它看上去很不错,谢谢! 在每个文件夹中有1000个没有子目录的文件,所以应该没问题。 如果我将它放在我想应用它的文件夹中并使用%〜DP0,其中$ folder1是?还是我必须指定完整的位置? –
由于您的目标是2个文件夹,因此您最好使用完整路径来实现IMHO的一致性。它肯定有可能在它所在的文件夹的上下文中运行,但是仍然需要为第二个文件夹编写完整路径,并且您需要添加排除规则,以便脚本本身不会被清除...更容易将其保存在*脚本文件夹中,然后在运行前根据需要更新路径 –
我测试过该脚本并且它可以工作。真的很感谢你的时间!不幸的是,它对我来说并不自然,所以我不会流利。*男人,高五! –