我有以下脚本逐行读取文件并用指定的文本替换每行中的模式,然后将其写入另一个文件:
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.
知道我可能做错了什么吗?我怀疑在搜索替换时使用的正则表达式模式有问题 - 当我删除\->
时,它可以工作,但没有理由说这应该是一个问题。
答案 0 :(得分:2)
重定向操作符>
导致命令行出现问题。用"
:
powershell ".\filereplace.ps1 c:\docs\infile.txt c:\docs\outfile.txt '.{30,}\->.*\r\n' '*'"