PowerShell脚本异常:如何实现每个子目录仅保留一个随机TXT文件?
每个子目录仅保留一个随机TXT文件的PowerShell解决方案
原脚本的问题在于:它会递归收集所有子目录的TXT文件并放入一个整体列表,仅跳过列表的第一个文件后删除其余所有文件——这就导致只有第一个被遍历到的TXT文件保留,其他子目录的所有TXT都会被全部删除,完全不符合需求。
要实现每个子目录单独保留一个随机TXT文件,需要按目录分组处理,正确脚本如下:
Get-ChildItem -Path "C:\New" -Recurse -Include *.txt | Group-Object Directory | ForEach-Object { # 从当前目录的所有TXT文件中随机选一个保留 $keepFile = $_.Group | Get-Random # 删除当前目录中除保留文件外的所有TXT(-WhatIf用于预览操作,确认后可移除) $_.Group | Where-Object { $_ -ne $keepFile } | Remove-Item -WhatIf }
脚本说明:
Group-Object Directory:将所有TXT文件按所在的子目录分组,确保每个组对应一个子目录下的全部TXT文件Get-Random:从当前目录的文件组中随机挑选一个文件作为保留对象Where-Object { $_ -ne $keepFile }:筛选出当前目录中需要删除的文件(除保留文件外的所有TXT)-WhatIf:这是安全验证参数,执行时只会显示将要删除的文件,不会实际执行删除操作。确认预览结果符合预期后,再移除该参数执行真实删除。
内容的提问来源于stack exchange,提问作者Shahpari
相关产品推荐
相关产品推荐

