【问题标题】:Error with recursive deletion in WindowsWindows 中的递归删除错误
【发布时间】:2017-03-25 23:50:05
【问题描述】:

我目前正在卸载一些为大量文件生成数据的软件,全部为.jpg.nfo,我想删除这些文件。我正在尝试使用 PowerShell 执行此操作,我尝试过的命令是:

del /S *.jpg

结果收到如下:

Remove-Item:找不到接受参数“*.jpg”的位置参数。
在 line:1 char:1
+ del /S *.jpg
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

谢谢!

【问题讨论】:

  • 是CMD命令,不是PowerShell命令。

标签: windows powershell delete-file


【解决方案1】:

tl;dr

  • 任一按原样运行cmd.exe 命令,为其添加前缀cmd --% /c
    cmd --% /c del /S *.jpg
    @ 987654326@,停止解析符号,告诉 PowerShell 停止解析剩余的参数并按原样传递它们(除了扩展 %<name>% 环境变量引用) - 请参阅 Get-Help about_Parsing

  • 或者:最好使用PowerShell原生的Remove-Item cmdlet
    Remove-Item * -Recurse -Include *.jpg -WhatIf
    请注意common parameter-WhatIf 如何方便地让您在提交操作之前预览操作;见Get-Help Remove-Item

    • 注意:从 PSv5.1 开始,Remove-ItemCopy-ItemMove-Item cmdlet 以及在较小程度上,Get-ChildItem 在涉及递归操作和 @ 987654337@ 和 -Exclude 参数 - 有很多微妙之处。
      然而,总的来说,PowerShell 的 cmdlet 比它们的 cmd.exe 对应物强大得多,学习如何有效使用它们的任何努力都是值得的 - 尤其是因为您很快就能在 Unix 平台也是如此

cmd.exe deldir 等命令内置在 cmd.exe 中,不能从 PowerShell 直接调用;要调用它们,您必须使用cmd /c 显式调用cmd.exe,如上所示。

可能令人困惑的是,PowerShell 为其 自己的 命令 (cmdlet) 定义了 aliases,该命令以它们的大致 等效 @987654346 命名@同行。
PowerShell cmdlet 的真实名称非常不同,在冗长之后,但 very consistent naming scheme(甚至控制 PowerShell-native 别名的命名)。

例如,del 是 PowerShell 的 Remove-Item cmdlet 的别名。

这种别​​名是一把双刃剑:一方面,它使习惯cmd.exe(批处理编程)的人更容易发现他们的PowerShell对应物;另一方面,它掩盖了 PowerShell 的命令行语法完全不同这一事实。

要了解 PowerShell 在您键入名称时实际调用的命令,请使用 Get-Command

> Get-Command del

CommandType     Name                                               Version    Source                                                                           
-----------     ----                                               -------    ------                                                                           
Alias           del -> Remove-Item              
  • 要快速了解命令的语法,请使用-? 调用它或使用Get-Help
    del /?

  • 如需更广泛的帮助,请使用Get-Help -detailed <cmd>Get-Help -full <cmd>Get-Help -detailed Get-Help

如您所见,您也可以将-? 传递给Get-Help 并使用别名 形式的命令调用。

【讨论】:

    【解决方案2】:

    您正在寻找:

    Get-ChildItem {Path to root of folder to search from} -Recurse | Where-Object (($_.FullName -like "*.jpg") -or ($_.FullName -like "*.nfo")) | Remove-Item -Force
    

    我尚未对此进行测试,因为我正在使用该应用程序在我的 iPhone 上写作,所以如果有错误,请告诉我,我会修复它。

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 1970-01-01
      • 2023-04-03
      • 2011-02-08
      • 2017-05-12
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多