首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell如何从删除过程中排除文件夹

Powershell如何从删除过程中排除文件夹
EN

Stack Overflow用户
提问于 2020-06-11 10:13:18
回答 1查看 363关注 0票数 0

我有一个PowerShell脚本,用于从根文件夹及其SubFolders中删除所有类型的文件,这些文件的历史超过x天。这很好,但是现在我想从删除过程中排除两个子文件夹。尝试过排除命令,但是由于我不熟悉Powershell,所以我很难使它正确。

代码语言:javascript
复制
PowerShell version: 5.1

文件夹结构(希望从删除过程中排除SubDir 2和SubDir3 )

代码语言:javascript
复制
MainDir
     |
  SubDir1 -> Folder1 -> Folder2 -> Zip/CSV files 
  SubDir2 -> Folder1 ->.txt files
               |
              Folder2 -> .txt files
  SubDir3 -> Zip files
  SubDir4 -> Folder1 -> zip/csv files

剧本:

代码语言:javascript
复制
param([string] $dir = "C:\MainDir", 
      [string] $days = "15")
      $error.clear()
      try
      {


     $refDate = (Get-Date).AddDays(-$days)
    Get-ChildItem -Path $dir -Recurse | 
    Where-Object { !$_.PSIsContainer -and  $_.LastWriteTime -lt $refDate } | 
    Remove-Item -Force

    }


    catch  {

  Write-Error  $_

  }

  if (!$error) {
Write-Host  'Data deleted for files which are older than' $days 'Days'
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-11 10:30:46

由于您使用的是PS5.1,所以可以使用-File开关,而不必在Where子句中使用!$_.PSIsContainer

若要排除子文件夹,可以尝试以下代码:

代码语言:javascript
复制
$refDate = (Get-Date).AddDays(-$days).Date  # set to midnight
$excludeFolders = 'SubDir2', 'SubDir3'      # an array of folder names to exclude

# create a regex of the folders to exclude
# each folder will be Regex Escaped and joined together with the OR symbol '|'
$notThese = ($excludeFolders | ForEach-Object { [Regex]::Escape($_) }) -join '|'

Get-ChildItem -Path $dir -Recurse -File | 
Where-Object { $_.DirectoryName -notmatch $notThese -and $_.LastWriteTime -lt $refDate } | 
Remove-Item -Force
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62321998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档