Powershell 命令删除其他文件夹中不存在的所有文件

Powershell 命令删除其他文件夹中不存在的所有文件

我有两个文件夹 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语法,所以我希望它是正确的。它对我而言是有效的。

相关内容