![Powershell 命令删除其他文件夹中不存在的所有文件](https://linux22.com/image/1540205/Powershell%20%E5%91%BD%E4%BB%A4%E5%88%A0%E9%99%A4%E5%85%B6%E4%BB%96%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6.png)
我有两个文件夹 A 和 B,它们包含的文件名大多相似,但缺少一些文件A
。
A
| 2.txt
| 10.txt
| zxc.txt
乙
| 1.txt // 应删除
| 2.txt
| 10.txt
| asd.txt // 应删除
| asdfg.txt // 应删除
| zxc.txt
如何从 B 中删除所有与 A 中没有相同名称的文件?因此,最终 B 应该保留与 A 中相同的文件名。
它实际上不必是 powershell,我只需要一种在 Windows 10 上批量删除文件的方法。
答案1
在 PowerShell 中,总有另一种方法。
有了这个初始树(在 RAM 驱动器 A: 上):
PS A:\> tree . /F
A:\
├───A
│ 10.txt
│ 2.txt
│ zxc.txt
│
└───B
1.txt
10.txt
2.txt
asd.txt
asdfg.txt
zxc.txt
这行代码输出:
PS A:\> gci B|?{! (test-path ("A\$($_.Name)"))}|rm -whatif
What if: Performing the operation "Remove File" on target "A:\B\1.txt".
What if: Performing the operation "Remove File" on target "A:\B\asd.txt".
What if: Performing the operation "Remove File" on target "A:\B\asdfg.txt".
更详细的版本(!等于不):
Get-ChildItem B|Where-Object {! (Test-Path ("A\$($_.Name)") ) }|Remove-Item
无变量,仅管道(根据条件)
答案2
按照@flolilolilo 的评论,这有效:
$A=GCI -Path ./A | select fullname,name;
$B=GCI -Path ./B | select fullname,name;
for ($i = 0; $i -lt $B.Count ; $i++) {
if($B[$i].name -notin $A.name){
Remove-Item $B[$i].fullname
}
}
我必须在 PowerShell 中搜索for
语法,所以我希望它是正确的。它对我而言是有效的。