Powershell Remove-Item将文件夹留在

时间:2016-12-15 15:41:00

标签: powershell

因此,我想使用以下"脚本"

每晚清理一些用户个人资料。
Get-ChildItem 'F:\View\Profiles\' -Recurse -Force |
    Where-Object {$_.Directory -match 'F:\\View\\Profiles\\((\w*).V2)\\AppData\\Roaming\\Trillian\\users\\((\w*%\w*%\w*))\\logs\\(_CLOUD|ASTRA)'} |
    Remove-Item -Recurse -Force

这会删除所有日志文件,但会留下文件夹结构。因此,我尝试了以下查询。

Get-ChildItem 'C:\TestProfileClean' -Recurse -Force |
    Where-Object {(($_.Name -eq "logs" -and $_.Directory) -and $_.DirectoryName -match 'C:\\TestProfileClean\\(\w*.V2)\\AppData\\Roaming\\Trillian\\Users\\((\w*)%40(\w*)%2Ecom)' )} |
    Remove-Item -Recurse -Force

这可确保删除的文件夹名为" logs"它是一个目录,目录名称采用这种格式。

C:\\TestProfileClean\\(\w*.V2)\\AppData\\Roaming\\Trillian\\Users\\((\w*)%40(\w*)%2Ecom)

问题是,当我运行第二个命令时,它不会删除任何文件,如果我切断了$_.DirectoryName,那么我得到以下输出。

Directory: C:\TestProfileClean\username.V2\AppData\Roaming\Trillian\users\username%40compcorp%2Ecom


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       12/14/2016   9:56 AM                logs 

哪个会删除我想要的内容,但不足以让我轻松运行它。

阻止文件夹被删除但脚本将删除所有非文件夹项目的错误。

1 个答案:

答案 0 :(得分:1)

您缺少通配符来浏览该文件夹下的所有通配符。我刚刚修改了你的代码:

def fetch[S <: PetSearcher[F], F <: Thing](searcher: S, what: F): Unit = {

注意:我没有检查正则表达式。我只调整 get-childitem 部分。

除此之外,我还有另外两个建议。如果您真的想每晚删除用户配置文件,那么您可以使用小实用工具

1)由批次

组成

2)由powershell制作。

以下是供您参考的链接。

Delprof - Batch

Delprof - Powershell

希望这有助于...... !!!