【发布时间】:2021-07-05 23:14:59
【问题描述】:
说明
无法删除 OneDrive 目录中的非空文件夹
重现步骤
- 在 OneDrive 目录中启动 PowerShell
PS C:\Users\MyUserName\OneDrive>
- 尝试使用 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\'
注意
- PowerShell 和 Administrator:PowerShell 得到相同的结果;
- 如果我退出 OneDrive 进程并在 OneDrive 目录下创建一个新的非空文件夹,PowerShell 可以正常删除它(见注 4,因为未同步的文件夹没有 ReparsePoint 属性);
- CMD 可以成功删除文件夹,这意味着我也可以在 PowerShell 中使用以下命令来删除文件夹。但我只想通过 PowerShell cmdlet 来实现我的目标;
cmd.exe /C "rd /s test"
- Get-ChildItem cmdlet 显示普通文件夹(未由 OneDrive 同步)的模式为“d”(目录),但同步文件夹的模式为“l”(重解析点)。这是我无法正常删除 OneDrive 目录下的文件夹的原因吗?
版本信息
PS版本:7.1.3
操作系统:Microsoft 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
【问题讨论】:
-
可以肯定
Remove-Item对文件和文件夹对象的处理方式不同。如果我记得我写了一个脚本来做类似的事情,我需要先删除文件,然后再删除文件夹。 -
如果您尝试使用
-Force会发生什么? -
试试
-Recurse。你应该看看docs。 -
@Vivere 我试过了,但没用。通常,即使没有
-Recurse,PowerShell 也应该返回确认消息(就像有问题的预期结果一样)而不是错误消息。 -
@SantiagoSquarzon 我试过了,但没有用。其实test文件夹里面并没有隐藏文件或文件夹,所以我觉得
-Force参数无关紧要。
标签: windows powershell onedrive