i有.txt文件,该文件具有100个语句,如DLL和\ASABC_1CD
的名称,在每行中更改
-MASSFile=x.dll,\ASABC_1CDsoftwareDDDx.dll
\ASABC_1CD
不是恒定的,每天都在变化。dll名称是什么。
因此,在PowerShell脚本中,我想按名称x.dll搜索,该名称X.dll在每行两次中存在,然后用两个.dll名称之间的\ASABC_1CD
替换CC_3
所以最终语句如下
-MASSFile=x.dll,....LXsoftwareDDDx.dll
您可以将-replace
与Lookaround断言使用:
$line = '-MASSFile=x.dll,\ASABC_1CDsoftwareDDDx.dll'
$dllName = 'x.dll'
$newPath = '\serversharepathto'
$line -replace ('(?<=={0},).+(?=\{0}$)' -f [regex]::escape($dllName)), $newPath
上述产量:
-MASSFile=x.dll,\serversharepathtox.dll
为了对文件的所有行执行上述替换,并更新该文件,请将Get-Content
与ForEach-Object
和Set-Content
相结合:
$fileToUpdate = 'file.txt'
$dllName = 'x.dll'
$newPath = '\serversharepathto'
(Get-Content $fileToUpdate) | ForEach-Object {
$_ -replace ('(?<=={0},).+(?=\{0}$)' -f [regex]::escape($dllName)), $newPath
} | Set-Content -Encoding Utf8 $fileToUpdate
请注意,需要将
Get-Content
调用包含在(...)
中以确保在Fult 中读取,, unfront ,如果您想编写,这是必需的结果回到同一文件。Set-Content
带有明确的-Encoding
值确保在输出上使用所需的字符编码;如果您满足于" Unicode"(UTF-16LE)编码,则可以使用> $fileToUpdate
而不是Set-Content
调用。
这是您需要的吗?
get-content $filepath |
%{$_.Replace("\ASABC_1CD","....LX")} |
Set-Content $filepath
如果您只想在名为 x.dll
的文件上更改它,则可以将替换方法更改为:
$_.Replace("x.dll,\ASABC_1CD","x.dll,....LX")
尝试以下:
$yourfile="c:temptest.txt"
(get-content "$yourfile").Replace("x.dll,\ASABC_1CD","x.dll,....LX") | set-content $yourfile