我有.TXT文件,其中有100个语句,其名称为DLL,\\AS\ABC_1\CD
每行都有变化
-MASSFile=x.dll,\\AS\ABC_1\CD\software\DDD\x.dll
\\AS\ABC_1\CD
不是常量并且每天都在变化。唯一的名称是。{/ p>
所以在powershell脚本中,我希望按名称x.dll进行搜索,每个行中存在两次,并在两个.Dll名称之间用\\AS\ABC_1\CD
替换..\..\LX
所以最终陈述如下
-MASSFile=x.dll,..\..\LX\software\DDD\x.dll
答案 0 :(得分:0)
这是你需要的吗?
get-content $filepath |
%{$_.Replace("\\AS\ABC_1\CD","..\..\LX")} |
Set-Content $filepath
如果您只想在名为x.dll
的文件上更改它,可以将替换方法更改为:
$_.Replace("x.dll,\\AS\ABC_1\CD","x.dll,..\..\LX")
答案 1 :(得分:0)
试试这个:
$yourfile="c:\temp\test.txt"
(get-content "$yourfile").Replace("x.dll,\\AS\ABC_1\CD","x.dll,..\..\LX") | set-content $yourfile
答案 2 :(得分:0)
您可以将-replace
与lookaround assertions:
$line = '-MASSFile=x.dll,\\AS\ABC_1\CD\software\DDD\x.dll'
$dllName = 'x.dll'
$newPath = '\\server\share\path\to'
$line -replace ('(?<=={0},).+(?=\\{0}$)' -f [regex]::escape($dllName)), $newPath
以上产量:
-MASSFile=x.dll,\\server\share\path\to\x.dll
为了对文件的所有行执行上述替换并更新该文件,请将Get-Content
与ForEach-Object
和Set-Content
合并:
$fileToUpdate = 'file.txt'
$dllName = 'x.dll'
$newPath = '\\server\share\path\to'
(Get-Content $fileToUpdate) | ForEach-Object {
$_ -replace ('(?<=={0},).+(?=\\{0}$)' -f [regex]::escape($dllName)), $newPath
} | Set-Content -Encoding Utf8 $fileToUpdate
请注意,需要在Get-Content
中附上(...)
来电,以确保在完整,预先中读取,如果要将结果写回同一文件,则需要这样做。
Set-Content
值的 -Encoding
可确保在输出中使用所需的字符编码;如果您对“Unicode”(UTF-16LE)编码感兴趣,则可以使用> $fileToUpdate
代替Set-Content
来电。