我有一个包含大量目录和文件的驱动器,其中一些已损坏且没有文件扩展名.我想删除所有没有扩展名的文件.我已经尝试过gci | where {$_.extension -eq ""}并且有gci | where {$_.extension -eq "."}各种各样的变化,但最终却没有在驱动器上得到任何东西.
如果我查看gci | select Extension文件的结果显示没有扩展名,就像一个目录,不知道去哪里.
任何帮助,将不胜感激.
最简单,最快的解决方案(PSv3 +)是使用-Filter参数:
Get-ChildItem -File -Filter *.
Run Code Online (Sandbox Code Playgroud)
如本答案所述。
至于基于管道的解决方案:
现在,PowerShell Core为-Not交换机提供了简化的比较语句语法,该语法本身是Windows PowerShell v3 中引入的Where-Object(其内置别名为?),从而可以实现TheMadTechnician的以下更简洁的有用答案:
Get-ChildItem -File | Where-Object -Not Extension
Run Code Online (Sandbox Code Playgroud)
正如TheMadTechnician的答案,这里采用隐式布尔逻辑:任何非空字符串的计算结果为$True在布尔上下文,因此应用-Not这意味着$True如果字符串只返回是空的,也就是说,如果文件没有扩展名。
至于你尝试了什么:
gci | where {$_.extension -eq ""}原则上可以工作,除了它还包括directory。
在PSv3 +中,您可以使用该-File开关将结果限制为files,如上所述。
在PSV2必须添加一个条件脚本块的基础上,.PSISContainer只返回属性$True的目录:
gci | where { -not $_.PSIsContainer -and $_.extension -eq "" }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |