删除文件(如果文件头行除外)为空

时间:2019-02-20 22:16:16

标签: powershell cmd

我正在尝试编写PowerShell脚本以删除文件(如果文件头为空)。

2 个答案:

答案 0 :(得分:0)

奥拉夫同意...

Khader-您要搜索的内容。网上有一些关于如何计算文件行数的示例。

只需搜索“文件中的Powershell计数行”

点击率示例。

Use a PowerShell Cmdlet to Count Files, Words, and Lines

How to count number of lines and words in a file using Powershell?

  

如果我想知道文件中包含多少行,请使用   使用线路开关的Measure-Object cmdlet。显示此命令   在这里:

Get-Content C:\fso\a.txt | Measure-Object –Line
  

如果我需要知道字符数,可以使用字符   切换:

Get-Content C:\fso\a.txt | Measure-Object -Character
  

还有一个单词转换参数,它将返回数字   文本文件中的单词。它的用法与字符或   线路切换参数。命令显示在这里:

Get-Content C:\fso\a.txt | Measure-Object –Word
  

在下图中,我使用Measure-Object cmdlet进行计数   线;然后是线条和字符;最后是线条,字符和   话。这些命令说明了组合开关以返回   具体信息。

OP的更新。

您应该更新原始的上下文问题,而不要在注释中添加代码

至于……

  

有什么办法可以返回计数并与if一起使用?   语句检查它是否等于1,然后删除文件

在检查“行”数大于1时只需使用if语句

    If (Get-Content $_.FullName | Measure-Object –Line | Where-Object -Property Lines -gt 1)
    {
        'Count is greater than one'
        Remove-Item ...
    }

同样,这是非常基本的PowerShell概述,因此请谨慎考虑Olaf的建议,以限制将来遇到的混乱,挫折,误解和错误。

答案 1 :(得分:0)

postanote's answer提供有关使用Measure-Object cmdlet的一些有用的背景信息。

但是,在手头的情况下,使用以下内容更加简单快捷:

$file = 'C:\path\to\FileOfInterest'

if ((Get-Content -First 2 $file).Count -le 1) {
  Remove-Item $file
}
  • Get-Content -First 2 $file从文件$file开始最多返回2行,作为 array

    • 注意:-First-TotalCount参数的更具描述性的别名;在PowerShell v2中,请使用后者。
  • (...).Count计算该数组的元素,即实际读取的行数。 [1]

  • -le 1-le的意思是小于等于)返回$true,尽管请求了 2 行,仅返回0或1。

  • 然后,Remove-Item调用将删除文件$file


[1]直到PowerShell版本2,如果仅读取 1 行,.Count将返回$null,因为PowerShell返回的是按原样输出对象,而不是将其包装在单个元素的数组中。但是,由于在与$null之类的数值比较中,0被强制转换为-le,因此该解决方案也适用于v2。 PowerShell版本3及更高版本甚至在标量(单个对象)上隐式实现.Count属性,该属性明智地返回1