【问题标题】:Powershell: Replace a keyword with contents from a txt filePowershell:用txt文件中的内容替换关键字
【发布时间】:2015-04-15 19:34:09
【问题描述】:

我目前有几个文件正在使用 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”。

如何将关键字替换为现有文本文件的内容??

【问题讨论】:

    标签: variables powershell replace


    【解决方案1】:

    这是你的问题(请注意我在 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 方法存在于它自己的世界中。请参阅我之前对此的回答:Create new absolute path from absolute path + relative or absolute path

    您可以在我上面链接的问题中看到一个解决方案,或者您可以简单地使用Get-Item 来获取文件的FileInfo-Object 并使用它的FullName-property 来获取完整路径。例如:

    $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>
    

    【讨论】:

      猜你喜欢
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2019-04-18
      • 2023-03-28
      • 2022-10-03
      相关资源
      最近更新 更多