PowerShell v4 Get-Content:找不到与参数名称匹配的参数'分隔符'

时间:2015-10-23 20:04:32

标签: powershell

我希望有人可以帮我完成这项工作,但我在网上遇到这种情况并没有好运。

我需要使用PowerShell(遗憾的是我不能使用Python或.NET这样:()来解析文件列表以确定它们是否包含/ r的行终止而不是/ r / n。当单个文件通过时,此脚本以前处于生产和工作状态。

我正在进行调整,以便可以容纳多个文件。

我正在获取文件名列表并将它们放入一个数组(这是有效的)但是当我试图通过if语句循环文件时,我得到了这个错误。

这是我的代码:

param(
#[Parameter(Mandatory=$True)]
[String]$FileName = "C:\LineTermTest\*C*.txt"
)

$FileNameArray = Get-ChildItem -Path $FileName    | where {!$_.psicontainter }| Select-Object fullname

for ($i=0; $i -le $FileNameArray.Length -1; $i++ )
{
$File = $FileNameArray[$i]


if (Get-Content -path $File -Delimiter "`0" | Select-String "[^`r]`n"   )                                                         


    {
        $content = Get-Content $File
        $content | Set-Content $File -Replace "`n", "'r'n" -Encoding ASCII
        [gc]::collect() 
        [gc]::WaitForPendingFinalizers()
    }
}

这是我得到的错误

  

Get-Content:找不到与参数名称匹配的参数' Delimiter'。   在行:13 char:39   + if(Get-Content -path $ File -Delimiter<<<<" 0" | Select-String "[^ r]`n")
      + CategoryInfo:InvalidArgument:(:) [Get-Content],ParameterBindingException       + FullyQualifiedErrorId:NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

     

Get-Content:找不到与参数名称匹配的参数' Delimiter'。   在行:13 char:39   + if(Get-Content -path $ File -Delimiter<<<<" 0" | Select-String "[^ r]`n")
      + CategoryInfo:InvalidArgument:(:) [Get-Content],ParameterBindingException       + FullyQualifiedErrorId:NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

     

Get-Content:找不到与参数名称匹配的参数' Delimiter'。   在行:13 char:39   + if(Get-Content -path $ File -Delimiter<<<<" 0" | Select-String "[^ r]`n")
      + CategoryInfo:InvalidArgument:(:) [Get-Content],ParameterBindingException       + FullyQualifiedErrorId:NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

1 个答案:

答案 0 :(得分:0)

在您的脚本中,$ File是' PSCustomObject'而不是FileInfo对象,因此您需要使用其属性' fullname'像这样: Get-Content -path $ File.fullname -Delimiter"`0" 。这是因为$ FileNameArray中的对象是使用Select-Object创建的。

你可以通过省略" |来避免这种情况选择对象全名"在创建$ FileNameArray时。这样,$ FileNameArray包含FileInfo对象,Get-Content可以直接使用它们。这是首选方式。

所以这一行:

$FileNameArray = Get-ChildItem -Path $FileName    | where {!$_.psicontainter }| Select-Object fullname

成为这一行:

$FileNameArray = Get-ChildItem -Path $FileName    | where {!$_.psicontainter }