我正在尝试编写PowerShell脚本以删除文件(如果文件头为空)。
答案 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
。