Скрипт Powershell для замены на регулярное выражение не работает - PullRequest
1 голос
/ 21 ноября 2011

У меня есть следующий скрипт, который читает строку за строкой в ​​файле и заменяет шаблон в каждой строке указанным текстом, а затем записывает его в другой файл:

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 Ответ

2 голосов
/ 21 ноября 2011

Оператор перенаправления > вызывает проблему в командной строке. Заключите всю команду с помощью ":

powershell ".\filereplace.ps1 c:\docs\infile.txt c:\docs\outfile.txt '.{30,}\->.*\r\n' '*'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...