У меня есть следующий скрипт, который читает строку за строкой в файле и заменяет шаблон в каждой строке указанным текстом, а затем записывает его в другой файл:
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.
Есть идеи, что я могу делать не так? Я подозреваю, что что-то не так с шаблоном регулярных выражений, используемым при поиске замены - когда я удаляю \->
, он работает, но нет причины, по которой это должно быть проблемой.