使用PowerShell替换给定位置的字符串

时间:2016-10-08 10:41:04

标签: string powershell replace

我有一个文件夹,其中有4000个csv文件,目前正处于生产状态并且存在运行事件。

使用PowerShell我想替换:

In all files => OK
In all lines => OK

从位置开始9到位置结束18的所有字符串,不考虑当前字符串内容。我想只是一个正确的正则表达式的问题,但不能使用。

-replace 'WhatToUse','MyNewString'

示例:(所有文件包含不同的字符串,08.10.2016不是固定字符串)

3162498;08.10.2016;30.10.2016;CHN;

会变成

3162498;MyNewString;30.10.2016;CHN;

2 个答案:

答案 0 :(得分:2)

如果您确定这些职位,您可以这样做:

$old = "3162498;08.10.2016;30.10.2016;CHN;"
$new = $old.remove(8,10).insert(8,"MyNewString")

会导致:3162498; MyNewString; 30.10.2016; CHN;

答案 1 :(得分:0)

试试这个(验证它是否可以)

    $pathwithfiles= "C:\temp" 
    $stringtosearh="toto"
    $stringtoreplace="titi"
    $delimitercsv=";"


    $listfil=gci -Path $pathwithfiles -Recurse -File -Filter "*.csv"


    foreach ($currentfile in $listfil)
    {
        $contentfile=get-content $currentfile.FullName
        [string[]]$contentfileres=@()
        $numline=0

        foreach ($row in $contentfile)
        {

        $numline++ 

            if ($numline -eq 1)
            {
                $contentfileres+=$row 
                continue
            }
            else
            {
            [string[]] $linearray=$row -split $delimitercsv
            [string[]] $linearrayres=@()


                for ($i = 0; $i -lt $linearray.Count; $i++)
                { 

                       if ($i -ge 9 -and $i -le 18)
                        {
                        $linearrayres+=$linearray[$i].Replace($stringtosearh, $stringtoreplace)
                        }
                        else
                        {
                        $linearrayres+=$linearray[$i] 
                        }
                }

                $contentfileres+=($linearrayres -join $delimitercsv)

            }

        }

        $contentfileres | out-file ($currentfile.FullName )

        Write-Host "File $currentfile.FullName replaced"
    }