如何在Powershell中正确替换字符串而不将替换变量附加到换行符?

时间:2016-07-14 21:02:37

标签: powershell

我对powershell /编程很新,所以请耐心等待。我有这个错误,将新重命名的路径附加到新行而没有其余的路径。 控制台输出:

/content/pizza/en/ingredients/
helloworld/menu-eng.html

我想要的是什么:

/content/pizza/en/ingredients/helloworld/menu-eng.html

下面的代码应该重命名一堆路径。现在testName是硬编码的,但是在我让它正常工作后它将是动态的。

我的代码:

$testName = "helloworld"
$text = (Get-Content W:\test\Rename\rename.csv) | Out-String
$listOfUri = Import-Csv W:\test\Rename\rename.csv

foreach ($element in $listOfUri) {
    if ($element -match "menu-eng.html") {    
        $elementString = $element.'ColumnTitle' | Out-String
        $elementString = $elementString.Replace('menu-eng.html', '')
        $varPath1 = $elementString

        $elementString = $elementString.Insert('', 'http://www.pizza.com')
        $elementName = ([System.Uri]$elementString).Segments[-1]
        $elementString = $elementString.Replace($elementName, '')
        $elementString = $elementString.Replace('http://www.pizza.com', '')
        $varPath2 = $elementString.Insert($elementString.Length, $testName + '/')

        $text = $text.Replace($varPath1.Trim(), $varPath2)
    }
}
$text 

1 个答案:

答案 0 :(得分:2)

假设您的.csv文件如下所示:

ColumnTitle,Idk
/content/pizza/en/ingredients/SPAM/menu-eng.html,Stuff

然后:

$testName = 'helloworld'
foreach ($row in Import-CSV d:\rename.csv) {
    $bit = $row.'ColumnTitle'.Split('/')[-2]
    $row.'ColumnTitle'.replace($bit, $testName)
}

我不知道你的所有其他代码是什么,特别是我之前的评论,你的行:

$text = (Get-Content W:\test\Rename\rename.csv) | Out-String

$text转换为文件中所有行的/array/,包括标题。您仍然可以在PowerShell中使用.Replace(),但它会在每一行上进行替换。我不太清楚如何为您提供输出,但它会为输入文件中的每一行提供多行。