String 将给定位置的字符串替换为PowerShell
我有一个文件夹,其中有4000个csv文件,目前正在生产中,正在运行中 我想用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
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")