我是PowerShell的新手,我搜索了很多并将我的结果合并到此,但首先,我的文件夹结构是这样的:
我的目标是查找存储在 _bewertet 中的所有文件,如果这些文件也存在于除自身以外的任何其他子文件夹中(关于,文件名和大小),则应将其删除。所以要明确的是,这些文件应该保留在 _bewertet 中,而不是其他地方。
$ignore = @("*_bewertet*");
$one = Get-ChildItem -Recurse -path C:\Users\name\Desktop\test-neu\_bewertet
$two = Get-ChildItem -Recurse -path C:\Users\name\Desktop\test-neu -Exclude $ignore | ? { $_.PSIsContainer }
$matches = (Compare-Object -ReferenceObject $one -DifferenceObject $two -Property Name,Length -ExcludeDifferent -IncludeEqual)
foreach ($file in $matches)
{
Remove-Item C:\Users\name\Desktop\test-neu\$($file.Name)
}
到目前为止,如果我运行我的脚本,它实际上什么也没做......我的猜测是,需要调整Remove-Item部分。该路径仅转到 C:\ Users \ name \ Desktop \ test-neu \ 1.txt ,因此缺少相应的子文件夹。
如果你们能帮助我,那对我来说意味着很多。欢迎任何建议。祝你今天愉快。 :)
答案 0 :(得分:0)
这是我能想到的最简单的逻辑,以实现这个目标
$keep = Dir -Path t:\bewertet -Recurse
$allFiles = Dir -Path t:\ -Recurse -Include *.txt | Where Directory -NotLike "t:\bewertet*"
$allFiles | Where Name -in $keep.Name | Remove-Item
$Keep
定义bewertet文件夹中的文件列表
$allFiles
递归地定义所有文件的列表,仅指定.txt文件,目录不是t:\ bewertet。
最后,我们过滤$allFiles
,找到与$keep
中的文件匹配的名称的文件,然后删除其中的每个文件。
We forgot to check if it's the same size!
,因为我在圣诞精神中,我写了这个懒惰的比较。
$keep = gci t:\bewertet -Recurse
$allFiles = dir -Path t:\ -Recurse -Include *.txt | Where Directory -NotLike "t:\bewertet*"
$matches = $allFiles | ? Name -in $keep.Name
ForEach ($match in $matches){
$source = $keep | ? Name -eq $match.Name
$Samefile = ($source.Length -eq $match.length)
"Does file size match? [$Samefile]"
if ($Samefile){
"deleting..."
Remove-item $match
}
}