如何在批处理或PowerShell中找到文件第一行的长度

时间:2015-07-28 14:10:16

标签: powershell batch-file

我必须读取文件夹中的每个文件并确定每个文件的第一行的长度,然后根据该长度是否应该在表中进行操作。我可以批量遍历每个文件并将%% f作为文件,但是如何获得该长度并将其分配给变量?

如果有办法在Powershell中使用批处理文件执行此操作,这会有所帮助,但我还需要知道如何从批处理文件中调用Powershell。

2 个答案:

答案 0 :(得分:1)

简单的PowerShell代码如下所示:

param($path)
Get-ChildItem $path -File | 
    Select FullName,@{Label="1stLineLength";Expression={(Get-Content $_.FullName -First 1).Length}}

因此第一个参数将被视为脚本的路径。然后从批处理中调用它我借用了this SO question的答案。

Powershell.exe -executionpolicy remotesigned -File m:\Scripts\firstlinelength.ps1 "C:\temp"

这将在控制台上得到这样的输出。

FullName                              1stLineLength
--------                              -------------
C:\Users\mcameron\CleansedBigFile.txt             4

此代码假定您至少拥有PowerShell v3.0 -First-File参数并切换。我想大多数批处理代码都可以轻松转换为PowerShell等效代码,因此如果您的环境允许您考虑转换为功能强大的PowerShell。

答案 1 :(得分:0)

你的一些问题很模糊(什么表?)。但一般来说,根本不需要批处理文件。 PowerShell示例:

Get-ChildItem -File | ForEach-Object {
  $firstLineLength = (Get-Content $_ | Select-Object -First 1).Length
  if ( $firstLineLength -gt $whateverFromTable ) {
    ...
  }
}

请注意,在PowerShell v3之前,-File的{​​{1}}参数不存在。对于PowerShell v2及更低版本,您可以将Get-ChildItem替换为Get-ChildItem -File