我目前正在卸载一些为大量文件生成数据的软件,所有文件都是.jpg
和.nfo
,我想删除这些文件。我试图使用PowerShell来执行此操作,我尝试过的命令是:
del /S *.jpg
结果收到以下信息:
删除项目:找不到接受参数' *。jpg'的位置参数。 在行:1 char:1
+ del / S * .jpg
+ ~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(:) [Remove-Item],ParameterBindingException
+ FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
谢谢!
答案 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
。
Remove-Item
,Copy-Item
和Move-Item
cmdlet以及Get-ChildItem
在较小程度上是-Include
众所周知,在递归操作和-Exclude
和cmd.exe
参数方面很有挑剔 - 有很多细微之处。cmd.exe
对应的功能强大得多,并且任何努力学习如何有效地使用它们都是花费很多 - 尤其是因为您很快就能够使用PowerShell Unix 平台。del
和dir
之类的{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
并调用{。}}。