用正则表达式替换的Powershell脚本不起作用

时间:2011-11-21 05:56:17

标签: regex powershell

我有以下脚本逐行读取文件并用指定的文本替换每行中的模式,然后将其写入另一个文件:

param
(
    [string] $inFilePath,
    [string] $outFilePath,
    [string] $inputPattern,
    [string] $replacePattern
)

function Main()
{
    $sr = $null;
    $sw = $null;

    try
    {
        $sr = New-Object System.IO.StreamReader($inFilePath);
        $sw = New-Object System.IO.StreamWriter($outFilePath, $true);
        do
        {
            $fileLine = $sr.ReadLine();
            $fileLine2 = "";
            if ($fileLine -eq $null)
            {
                break;
            }
            $fileLine = $fileLine + [System.Environment]::NewLine;
            $fileLine2 = [System.Text.RegularExpressions.Regex]::Replace($fileLine, $inputPattern, $replacePattern);
            $sw.Write($fileLine2);
        }
        while ($fileLine -ne $null);
    }
    finally
    {
        $sr.Dispose();
        $sw.Dispose();
    }
}

Main;

不幸的是,当我将脚本保存为filereplace.ps1并将其调用时:

powershell .\filereplace.ps1 c:\docs\infile.txt c:\docs\outfile.txt '.{30,}\->.*\r\n' '*'

我收到此错误:

The filename, directory name, or volume label syntax is incorrect.

知道我可能做错了什么吗?我怀疑在搜索替换时使用的正则表达式模式有问题 - 当我删除\->时,它可以工作,但没有理由说这应该是一个问题。

1 个答案:

答案 0 :(得分:2)

重定向操作符>导致命令行出现问题。用"

括起整个命令
powershell ".\filereplace.ps1 c:\docs\infile.txt c:\docs\outfile.txt '.{30,}\->.*\r\n' '*'"