在Windows中递归删除出现错误

3

我正在卸载一些生成了大量文件的软件,这些文件全部为 .jpg.nfo 格式,我希望能够删除这些文件。我尝试使用PowerShell执行此操作的命令是:

del /S *.jpg

然后得到以下结果:

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

谢谢!


4
这是CMD命令,而不是PowerShell命令。 - user4003407
2个回答

5

总之

  • 要么:以 cmd --% /c 为前缀,直接运行你的 cmd.exe 命令:
    cmd --% /c del /S *.jpg
    --% 是停止解析符号,告诉 PowerShell 停止解析剩余的参数并将它们原样传递(除了扩展 %<name>% 环境变量引用)- 请参阅 Get-Help about_Parsing

  • 或者:最好使用 PowerShell 的本地 Remove-Item cmdlet:
    Remove-Item * -Recurse -Include *.jpg -WhatIf
    注意,常见参数 -WhatIf 可以方便地让你在执行操作之前预览操作;请参阅 Get-Help Remove-Item

    • 注意:截至 PSv5.1,Remove-ItemCopy-ItemMove-Item cmdlet,以及在递归操作和 -Include-Exclude 参数方面略有不同的 Get-ChildItem cmdlet,都在这方面非常棘手。
      但总体来说,PowerShell 的 cmdlet 比其 cmd.exe 对应项更加强大,任何学习如何有效使用它们的努力都是值得的 - 特别是因为你很快就可以在 Unix 平台上使用 PowerShell

deldircmd.exe 命令内置于 cmd.exe 中,不能直接从 PowerShell 调用;要调用它们,必须显式地调用 cmd.exe,如上所示。

可能令人困惑的是,PowerShell 为其自己的命令(cmdlet)定义了与它们粗略等效的 cmd.exe 对应项的别名。
PowerShell cmdlet 的真实名称非常不同,遵循冗长但非常一致的命名方案(甚至统治着 PowerShell 本地别名的命名)。

例如,del 是 PowerShell 的 Remove-Item 命令的别名。
这种别名机制有两面性:一方面,它使那些习惯于使用 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 命令。


0

你正在寻找:

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

我还没有测试过这个,因为我正在使用手机应用程序编写,所以如果有错请告诉我,我会进行修正。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接