我已经搜遍了所有人,但似乎没有什么能完全符合我的需要......
我有一个像这样的文件夹结构:
我想删除C:\ Test中的所有文件和文件夹(但不是C:\ Test本身)如果其附件文件夹为空。非空的附件目录应该保持不变。应删除所有其他文件和文件夹。
因此,如果上述路径中的唯一文件是C:\ Test \ Job2 \ attachments \ test.txt,则我的脚本后面剩下的唯一文件夹将是C:\ Test \ Job2 \ attachments。 Job1和Job3目录将被删除。
为了让球滚动,我试过这个以删除除附件文件夹之外的所有内容:
$TargetFolder = "C:\Test\*"
get-childitem $TargetFolder -exclude attachments* -recurse |
remove-item -WhatIf
...但似乎完全忽略了-exclude标志
这种方法很有用,但它让我提示我需要说“不”#39;为了让它正常工作:
Get-ChildItem -Path $TargetFolder -Recurse |
Select -ExpandProperty FullName |
Where {$_ -notlike $TargetFolder + "*\attachments\*.*"} |
sort length -Descending |
Remove-Item -Force
......如果这是与--Force
相反的事情会很棒答案 0 :(得分:0)
如果您只需要选择"否"对你来说,你是否尝试使用旗帜Remove-Item -Confirm:$False
?另外,请尝试Remove-Item -Force -Recurse
并查看是否有帮助。
答案 1 :(得分:0)
您无法对管道进行问题排查。
尝试这种方式,如果愿意,可以重新加入管道。
$TargetFolder = "C:\Test\*"
$FoldersInTargetFolder = Get-ChildItem -Path $TargetFolder | Where {$_.psIsContainer -eq $true}
ForEach ($folder in $FoldersInTargetFolder) {
[STRING]$AttachmentsFolder = "$($folder.FullName)\attachments"
$AttachF = Get-item $AttachmentsFolder
If ($AttachF.EnumerateFileSystemInfos() | select -First 1) {
#Found files and/or Folder in \attachments\
Remove-Item -Path $folder.FullName -Force
}
}