String 将给定位置的字符串替换为PowerShell

String 将给定位置的字符串替换为PowerShell,string,powershell,replace,String,Powershell,Replace,我有一个文件夹,其中有4000个csv文件,目前正在生产中,正在运行中 我想用PowerShell替换: In all files => OK In all lines => OK 从位置开始9到位置结束18的所有字符串,不考虑当前字符串内容。我想这只是一个使用正则表达式的问题,但不能 -replace 'WhatToUse','MyNewString' 示例:(所有文件都包含不同的字符串,08.10.2016不是固定字符串) 将成为 3162498;MyNewString;30

我有一个文件夹,其中有4000个csv文件,目前正在生产中,正在运行中

我想用PowerShell替换:

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

-replace 'WhatToUse','MyNewString'
示例:(所有文件都包含不同的字符串,08.10.2016不是固定字符串)

将成为

3162498;MyNewString;30.10.2016;CHN;
试试这个(确认它是否正常)


如果你对职位有把握,你可以这样做:

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

结果是:3162498;我的新闻字符串;30.10.2016;CHN

-替换“^(\d+?);(.+?);', '$1.新闻字符串这个巨大的未注释代码块与这个问题有什么关系?这个“巨大的未注释代码块”将strins替换为给定目录中所有csv中的位置9到18,如所问。。。你有更好的建议来批评我吗?
    $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"
    }
$old = "3162498;08.10.2016;30.10.2016;CHN;"
$new = $old.remove(8,10).insert(8,"MyNewString")