【问题标题】:PowerShell v4 Get-Content : A parameter cannot be found that matches parameter name 'Delimiter'PowerShell v4 Get-Content:找不到与参数名称“分隔符”匹配的参数
【发布时间】:2015-10-23 20:04:31
【问题描述】:

我希望有人能给我完成这项工作所需的动力,但我在网上遇到这种确切情况时运气不佳。

我需要使用 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:找不到与参数名称“分隔符”匹配的参数。 在行:13 字符: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:找不到与参数名称“分隔符”匹配的参数。 在行:13 字符: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:找不到与参数名称“分隔符”匹配的参数。 在行:13 字符:39 + if (Get-Content -path $File -Delimiter 0" | Select-String "[^r]`n" )
+ CategoryInfo : InvalidArgument: (:) [Get-Content], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand

【问题讨论】:

  • 有什么原因你不只是使用dos2unix吗?

标签: powershell


【解决方案1】:

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

您可以通过在创建 $FileNameArray 时省略“| Select-Object fullname”来避免这种情况。这样,$FileNameArray 包含 FileInfo 对象,Get-Content 可以直接使用这些对象。这是首选方式。

所以这一行:

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

变成这一行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2019-01-01
    • 2021-01-02
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多