Windows中的递归删除出错

时间:2017-03-25 23:50:06

标签: windows powershell delete-file

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

del /S *.jpg

结果收到以下信息:

  

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

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在寻找:

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

我还没有测试过这个,因为我正在使用该应用在iPhone上写字,所以如果它错了,请告诉我,我会修复它。

答案 1 :(得分:1)

<强> TL;博士

  • 按原样运行cmd.exe命令,前缀为cmd --% /c
    cmd --% /c del /S *.jpg
    --%,停止解析符号,告诉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在较小程度上是-Include众所周知,在递归操作和-Excludecmd.exe参数方面很有挑剔 - 有很多细微之处。
      但是,一般情况下, PowerShell的cmdlet比它们的cmd.exe对应的功能强大得多,并且任何努力学习如何有效地使用它们都是花费很多 - 尤其是因为您很快就能够使用PowerShell Unix 平台
deldir之类的{p cmd.exe命令内置于cmd.exe中,无法直接从PowerShell调用 ;要调用它们,您必须使用cmd /c显式调用cmd.exe,如上所示。

可能令人困惑的是,PowerShell为自己的命令(cmdlet)定义别名,这些命令以大致等效{{ 1}}对应物。
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

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