我有一个文件夹,其中有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;
答案 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"
}