【问题标题】:"rm -rf" equivalent for Windows PowerShell? [closed]Windows PowerShell 的“rm -rf”等效项? [关闭]
【发布时间】:2020-05-03 10:42:09
【问题描述】:

我已经阅读了问题"rm -rf" equivalent for Windows?。我还尝试了以下命令:

$ rm app
$ rmdir /s /q app
$ rmdir -s -q app
$ rd /s /q app

和许多其他变体。它总是提示我:

C:\ThisDirectoryDoesNotExist\app\ 中的项有子项,并且未指定 Recurse 参数。如果继续, 所有子项都将与该项目一起被删除。确定要继续吗?

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] 帮助(默认为“Y”):A

当我选择A时,它会抛出一个错误:

rm : 无法移除项目 C:\ThisDirectoryDoesNotExist\app.git\objects\pack\pack-45e426475eb08ff5042bf88556fbedd3956fba53.idx:你没有 足够的访问权限来执行此操作。

我该怎么做?

【问题讨论】:

  • rd /q /s 用于 CMD,但看起来您正在运行 PowerShell。没有什么能阻止您改用 CMD。而且这个问题与您使用的终端完全无关。这是一个shell问题。
  • @ErykSun 我收到了这个错误Remove-Item : A positional parameter cannot be found that accepts argument '/s'.。我也可以使用 git bash 轻松删除该文件夹。但这并不能回答我的问题。当然,这有关系,因为新的 Windows 终端预览将很快成为程序员的默认设置。它有潜力。试一试,你会看到的。我只需要使用那个新终端删除文件夹。我不明白为什么这么难理解。
  • 终端不是shell。你似乎混淆了两者。 CMD、PowerShell、bash 等都可以在经典的 conhost.exe 终端/控制台中正常工作,如果 Windows 控制台应用程序没有在已连接终端的情况下生成它们,则它们会分配该终端/控制台。控制台或终端为文本输入和输出提供 UI,在 API 函数和 IOCTL 或标准转义序列方面为程序提供不同程度的 UI 支持。
  • 再次,您使用的是 PowerShell,其中 rdremove-item 的别名,并且不支持与 CMD 的 rd 命令相同的语法。打开 CMD shell 以运行 rd /q /s -- 在您喜欢的任何终端或控制台中。如果您从资源管理器运行 cmd.exe,您将获得经典的 conhost.exe 终端。在 Windows 终端中,您可以在新选项卡中运行 CMD,或者只从 PowerShell 运行 cmd.exe。
  • @ErykSun 啊,这更令人困惑,反正得到了答案:)

标签: windows powershell


【解决方案1】:

只需按照建议指定递归参数即可:

rm -r app

如果文件夹包含隐藏文件,添加-Force参数:

rm -r -fo app

这是以下的简写形式:

Remove-Item -Recurse -Force -Path app

如果你没有适当的访问权限,那么你当然可以不删除它。


背景

rmdirrd 是可以在命令提示符下调用的命令(不是可执行文件)。 rm 默认不可用。例如,如果您安装了 MinGW 环境,则所有三个术语也可能指向可执行文件。但它们在 PowerShell 中不可用,因为 PowerShell 使用这些词作为 cmdlet Remove-Item 的别名:

PS> 'rm', 'rmdir', 'rd' | Get-Command

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           rm -> Remove-Item
Alias           rmdir -> Remove-Item
Alias           rd -> Remove-Item

如果您有一些可用作可执行文件的工具,您仍然可以通过指定它们的完整路径在 PowerShell 中访问它们,例如:

PS> C:\path\to\MinGW\msys\1.0\bin\rm.exe

但让我们坚持Remove-Item。由于它是一个 cmdlet,它需要某些参数或开关,例如 -Recurse。您可以将它们缩写,直到与其他可能的参数相比,它们仍然是明确的。因此您可以使用:

rm -r

例如在 bash 中,你也可以像这样传递两个参数:

rm -rf

当您将此命令发送到 PowerShell 时,它会尝试将 -rf 匹配到以 rf 开头的参数,该参数不存在。在 PowerShell 中,您必须将每个参数单独传递给 cmdlet。要传递-Force 参数,你必须至少写-fo,因为还有一个参数-Filter,因此-f 会不明确。

总之,要在 PowerShell 中从 bash 中获得 rm -rf 的等价物,您至少必须编写:

rm -r -fo

【讨论】:

  • @deadcoder0904 我在解决方案中添加了有关隐藏文件的详细信息,这些文件可能存在于您的目录中,因为它似乎是一个 git 存储库。
  • 第二个工作得非常好rm -r -fo app。感谢您的实际回答?
【解决方案2】:

尝试使用这个:-

rmdir /s directory_name

【讨论】:

  • 它给了我错误Remove-Item : A positional parameter cannot be found that accepts argument
猜你喜欢
  • 2010-09-11
  • 2021-10-30
  • 2021-03-28
  • 1970-01-01
  • 2012-05-13
  • 2012-10-05
  • 2011-02-28
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多