【问题标题】:Deleting all folders/files except for one folder and all root-files删除除一个文件夹和所有根文件之外的所有文件夹/文件
【发布时间】:2013-05-14 08:29:07
【问题描述】:

我已经离开 Powershell 几个月了,如果这很明显,请原谅..

我有一个包含数百个文件和文件夹的目录,我想删除根目录中的所有文件和其中一个子文件夹中的所有文件。

我将创建一个计划任务每​​周执行一次。

这是我目前所拥有的:

get-childitem -recurse | ?{ $_.psiscontainer } | remove-item

但很明显我只是在删除文件夹..

【问题讨论】:

    标签: powershell scheduled-tasks powershell-2.0


    【解决方案1】:

    您要保留一个子文件夹的内容还是只保留子文件夹本身?对于前者,这样做:

    Get-ChildItem 'C:\foo' -Exclude 'subfoldername' |
        Where-Object { $_.PSIsContainer } |
        Remove-Item -Recurse -Force
    

    对于后者,在第二步中删除子文件夹的内容:

    Get-ChildItem 'C:\foo' -Exclude 'subfoldername' |
        Where-Object { $_.PSIsContainer } |
        Remove-Item -Recurse -Force
    Get-ChildItem 'C:\foo\subfoldername' | Remove-Item -Recurse -Force
    

    使用 PowerShell v3 和更新版本,您可以通过将参数 -Directory 添加到 Get-ChildItem 来替换 Where-Object 过滤器:

    Get-ChildItem 'C:\foo' -Exclude 'subfoldername' -Directory |
        Remove-Item -Recurse -Force
    

    【讨论】:

      【解决方案2】:

      试试这个

      get-childitem -exclude SubFolderName -recurse | ?{ $_.psiscontainer } | remove-item
      

      【讨论】:

        【解决方案3】:

        此命令将执行您要查找的操作。根据我的阅读,Remove-Item 有问题。

        Get-ChildItem -Path D:\Temp -Recurse | Remove-Item -Exclude W3SVC5 -Recurse -force
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-29
          • 1970-01-01
          • 1970-01-01
          • 2012-12-15
          • 2019-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多