首页 > 解决方案 > 如何使用 PowerShell 删除 OneDrive 中的非空文件夹?

问题描述

说明

无法删除 OneDrive 目录中的非空文件夹

重现步骤

  1. 在 OneDrive 目录中启动 PowerShell
PS C:\Users\MyUserName\OneDrive>
  1. 尝试使用 Remove-Item cmdlet 删除此目录中的非空文件夹,例如:.\test\ 文件夹
PS C:\Users\MyUserName\OneDrive> Remove-Item .\test\

预期结果

如果没有 -Recurse 参数,PowerShell 应该返回一条确认消息,例如

Confirm
The item at C:\Users\MyUserName\OneDrive\test\ has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):

实际结果

PowerShell 返回错误消息

Remove-Item: Cannot remove item C:\Users\MyUserName\OneDrive\test\: The directory is not empty. : 'C:\Users\MyUserName\OneDrive\test\'

笔记

  1. PowerShell 和 Administrator:PowerShell 得到相同的结果;
  2. 如果我退出 OneDrive 进程并在 OneDrive 目录下创建一个新的非空文件夹,PowerShell 可以正常删除它(请参阅注 4,因为未同步的文件夹没有 ReparsePoint 属性);
  3. CMD 可以成功删除文件夹,这意味着我也可以在 PowerShell 中使用以下命令来删除文件夹。但我只想通过 PowerShell cmdlet 来实现我的目标;
cmd.exe /C "rd /s test"
  1. Get-ChildItem cmdlet 显示普通文件夹(未通过 OneDrive 同步)的模式为“d”(目录),但同步文件夹的模式为“l”(reparsepoint)。这是我无法正常删除 OneDrive 目录下的文件夹的原因吗?

版本信息

PS版本:7.1.3

操作系统:微软Windows 10.0.19042

OneDrive 版本:21.052.0314.0001 (Office 365 A1)

更新

我尝试删除 PowerShell 5 上的测试文件夹,但也失败了。

来自 PowerShell 5.1 的错误消息:

PS C:\Users\MyUserName\OneDrive> Remove-Item .\test\ -Force -Recurse
Remove-Item : Access to the cloud file is denied.
At line:1 char:1
+ rm .\test\ -Force -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Remove-Item], Win32Exception
    + FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.RemoveItemCommand

标签: windowspowershellonedrive

解决方案


上一个答案没有处理隐藏文件,您可以将这些添加到您的个人资料中

function rmc ($file) {
    (Get-Item $file).Delete()
}


function rmd ($folder) {
    Get-ChildItem -recurse -force $folder | Sort-Object -Property FullName -Descending | ForEach-Object { $_.Delete() }
    (Get-Item $folder).Delete()
}

推荐阅读