【问题标题】:How to use PowerShell to remove nonempty folder in OneDrive?如何使用 PowerShell 删除 OneDrive 中的非空文件夹?
【发布时间】:2021-07-05 23:14:59
【问题描述】:

说明

无法删除 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”(重解析点)。这是我无法正常删除 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


【解决方案1】:

我只是碰到了同样的事情,这对我有用:

Get-ChildItem -recurse .\test | Sort-Object -Property FullName -Descending | ForEach-Object { $_.Delete() }
(Get-Item test).Delete()

我是 PowerShell 的新手,所以可能有更优雅或更正确的方法来完成上述操作。

【讨论】:

  • 它工作但不删除文件夹,只删除文件。
【解决方案2】:

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

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()
}

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 2010-09-23
    • 2019-08-18
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2015-04-22
    • 2021-09-29
    • 2019-03-24
    相关资源
    最近更新 更多