Powershell:用 txt 文件中的内容替换关键字
Powershell: Replace a keyword with contents from a txt file
我目前有几个文件正在使用 powershell,希望创建一个输出文件。
我有一个包含关键字的模板文件。
我有几个文件,其内容属于模板的中间部分。
我有我需要更换的清单。
文本文件模板:
<pi.category>
<figure id="fig6"><title>TITLEHERE</title>
<graphic boardno="GRAPHBOARDNO"></graphic>
</figure>
<fncgrp>
<fnccode>FGCCODE</fnccode>
<fnctitle>FGCTITLE</fnctitle>
</fncgrp>ADDFILETEXTHERE</pi.category>
第二个文本文件,要插入到 "ADDFILETEXTHERE"(可能,这里可以是任何内容):
<pi.item><callout assocfig="fig1" numref="c1"/><qty>8</qty>
<smr maintcode="FZ" recovercode="Z" sourcecode="PA"/><nsn><fsc>5310</fsc>
<niin>00-763-8921</niin></nsn><partno>MS51967-23</partno><cageno>96906</cageno>
<name>NUT,PLAIN,HEXAGON</name><desc></desc></pi.item>
还有我的 powershell 脚本:
$content = [IO.File]::ReadAllText(".\insert.txt")
Get-Content C:\template.xml |
Foreach-Object {$_ -replace "R00000", "R00001"} |
Foreach-Object {$_ -replace "TITLEHERE", "Standard Practices"} |
Foreach-Object {$_ -replace "FGCCODE", "01520"} |
Foreach-Object {$_ -replace "FGCTITLE", "Hydraulic Line Stuff"} |
Foreach-Object {$_ -replace "GRAPHBOARDNO", "AVLBCP0123"} |
Foreach-Object {$_ -replace "ADDFILETEXTHERE", "$content"} |
Set-Content C:\output.xml
我可以让所有替换内容正常工作,但我无法获取插入 txt 文件的内容来替换 "addfiletexthere"。
如何用现有文本文件的内容替换关键字?
这是你的问题(注意我在 PowerShell 中的当前工作目录和错误中的路径):
PS C:\Users\Frode\Desktop> $content = [IO.File]::ReadAllText(".\insert.txt")
Exception calling "ReadAllText" with "1" argument(s): "Could not find file 'C:\WINDOWS\system32\insert.txt'."
At line:1 char:1
+ $content = [IO.File]::ReadAllText(".\insert.txt")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FileNotFoundException
.NET 方法在当前目录中存在于它自己的世界中。请参阅我之前对此的回答:
您可以在我上面链接的问题中看到解决方案,或者您可以简单地使用 Get-Item
获取文件的 FileInfo
-Object 并使用它的 FullName
- 属性 获取完整路径。例如:
$insertFile = Get-Item ".\insert.txt"
$content = [IO.File]::ReadAllText($insertFile.FullName)
#Test
@"
<pi.category>
<figure id="fig6"><title>TITLEHERE</title>
<graphic boardno="GRAPHBOARDNO"></graphic>
</figure>
<fncgrp>
<fnccode>FGCCODE</fnccode>
<fnctitle>FGCTITLE</fnctitle>
</fncgrp>ADDFILETEXTHERE</pi.category>
"@ -split [System.Environment]::NewLine |
Foreach-Object {$_ -replace "R00000", "R00001"} |
Foreach-Object {$_ -replace "TITLEHERE", "Standard Practices"} |
Foreach-Object {$_ -replace "FGCCODE", "01520"} |
Foreach-Object {$_ -replace "FGCTITLE", "Hydraulic Line Stuff"} |
Foreach-Object {$_ -replace "GRAPHBOARDNO", "AVLBCP0123"} |
Foreach-Object {$_ -replace "ADDFILETEXTHERE", "$content"}
#Output
<pi.category>
<figure id="fig6"><title>Standard Practices</title>
<graphic boardno="AVLBCP0123"></graphic>
</figure>
<fncgrp>
<fnccode>01520</fnccode>
<fnctitle>Hydraulic Line Stuff</fnctitle>
</fncgrp><pi.item><callout assocfig="fig1" numref="c1"/><qty>8</qty>
<smr maintcode="FZ" recovercode="Z" sourcecode="PA"/><nsn><fsc>5310</fsc>
<niin>00-763-8921</niin></nsn><partno>MS51967-23</partno><cageno>96906</cageno>
<name>NUT,PLAIN,HEXAGON</name><desc></desc></pi.item></pi.category>
我目前有几个文件正在使用 powershell,希望创建一个输出文件。
我有一个包含关键字的模板文件。 我有几个文件,其内容属于模板的中间部分。 我有我需要更换的清单。
文本文件模板:
<pi.category>
<figure id="fig6"><title>TITLEHERE</title>
<graphic boardno="GRAPHBOARDNO"></graphic>
</figure>
<fncgrp>
<fnccode>FGCCODE</fnccode>
<fnctitle>FGCTITLE</fnctitle>
</fncgrp>ADDFILETEXTHERE</pi.category>
第二个文本文件,要插入到 "ADDFILETEXTHERE"(可能,这里可以是任何内容):
<pi.item><callout assocfig="fig1" numref="c1"/><qty>8</qty>
<smr maintcode="FZ" recovercode="Z" sourcecode="PA"/><nsn><fsc>5310</fsc>
<niin>00-763-8921</niin></nsn><partno>MS51967-23</partno><cageno>96906</cageno>
<name>NUT,PLAIN,HEXAGON</name><desc></desc></pi.item>
还有我的 powershell 脚本:
$content = [IO.File]::ReadAllText(".\insert.txt")
Get-Content C:\template.xml |
Foreach-Object {$_ -replace "R00000", "R00001"} |
Foreach-Object {$_ -replace "TITLEHERE", "Standard Practices"} |
Foreach-Object {$_ -replace "FGCCODE", "01520"} |
Foreach-Object {$_ -replace "FGCTITLE", "Hydraulic Line Stuff"} |
Foreach-Object {$_ -replace "GRAPHBOARDNO", "AVLBCP0123"} |
Foreach-Object {$_ -replace "ADDFILETEXTHERE", "$content"} |
Set-Content C:\output.xml
我可以让所有替换内容正常工作,但我无法获取插入 txt 文件的内容来替换 "addfiletexthere"。
如何用现有文本文件的内容替换关键字?
这是你的问题(注意我在 PowerShell 中的当前工作目录和错误中的路径):
PS C:\Users\Frode\Desktop> $content = [IO.File]::ReadAllText(".\insert.txt")
Exception calling "ReadAllText" with "1" argument(s): "Could not find file 'C:\WINDOWS\system32\insert.txt'."
At line:1 char:1
+ $content = [IO.File]::ReadAllText(".\insert.txt")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FileNotFoundException
.NET 方法在当前目录中存在于它自己的世界中。请参阅我之前对此的回答:
您可以在我上面链接的问题中看到解决方案,或者您可以简单地使用 Get-Item
获取文件的 FileInfo
-Object 并使用它的 FullName
- 属性 获取完整路径。例如:
$insertFile = Get-Item ".\insert.txt"
$content = [IO.File]::ReadAllText($insertFile.FullName)
#Test
@"
<pi.category>
<figure id="fig6"><title>TITLEHERE</title>
<graphic boardno="GRAPHBOARDNO"></graphic>
</figure>
<fncgrp>
<fnccode>FGCCODE</fnccode>
<fnctitle>FGCTITLE</fnctitle>
</fncgrp>ADDFILETEXTHERE</pi.category>
"@ -split [System.Environment]::NewLine |
Foreach-Object {$_ -replace "R00000", "R00001"} |
Foreach-Object {$_ -replace "TITLEHERE", "Standard Practices"} |
Foreach-Object {$_ -replace "FGCCODE", "01520"} |
Foreach-Object {$_ -replace "FGCTITLE", "Hydraulic Line Stuff"} |
Foreach-Object {$_ -replace "GRAPHBOARDNO", "AVLBCP0123"} |
Foreach-Object {$_ -replace "ADDFILETEXTHERE", "$content"}
#Output
<pi.category>
<figure id="fig6"><title>Standard Practices</title>
<graphic boardno="AVLBCP0123"></graphic>
</figure>
<fncgrp>
<fnccode>01520</fnccode>
<fnctitle>Hydraulic Line Stuff</fnctitle>
</fncgrp><pi.item><callout assocfig="fig1" numref="c1"/><qty>8</qty>
<smr maintcode="FZ" recovercode="Z" sourcecode="PA"/><nsn><fsc>5310</fsc>
<niin>00-763-8921</niin></nsn><partno>MS51967-23</partno><cageno>96906</cageno>
<name>NUT,PLAIN,HEXAGON</name><desc></desc></pi.item></pi.category>