PowerShell批量清理子文件夹:保留文件夹与.cpp文件,删除其余内容
解决PowerShell删除子文件夹内非.cpp文件的问题
你的原命令问题在于直接遍历了目标路径$path下的所有项,包括子文件夹本身,过滤掉.cpp文件后,子文件夹会被当成要删除的对象执行删除操作。
正确的思路是:先遍历$path下的所有子文件夹,再进入每个子文件夹内部,删除除.cpp文件外的所有内容。
修正后的命令
gci -Path $path -Directory | ForEach-Object { # 遍历当前子文件夹内的所有内容 gci -Path $_.FullName | Where-Object { !($_.Name -ilike "*.cpp") } | Remove-Item -Recurse -Force }
关键说明
-Directory参数:确保只遍历$path下的子文件夹,不会把根目录的其他文件纳入处理-Recurse:如果子文件夹内还有嵌套的子目录或文件,会递归删除所有非.cpp内容-Force:强制删除只读、隐藏等特殊属性的文件/文件夹
如果需要测试命令是否正确,可以先把Remove-Item换成Select-Object FullName,查看将要删除的对象列表,确认无误后再执行删除操作。
内容的提问来源于stack exchange,提问作者Loaf
相关产品推荐
相关产品推荐

