Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 我缺少什么来取代我想要的一切?_Powershell_Text_Replace_Parameters - Fatal编程技术网

Powershell 我缺少什么来取代我想要的一切?

Powershell 我缺少什么来取代我想要的一切?,powershell,text,replace,parameters,Powershell,Text,Replace,Parameters,我需要2.txt文件作为参数。database.txt的格式如下(名称、地址、日期): 迈克尔,随机街1号,12月24日。 艾伦,随机街2号,12月24日。 凯文,随机街3号,12月24日 text.txt文件看起来像电子邮件,但重要的部分是: 名称:/Name/ 地址:/Address/ 日期:/Date/ 我需要为database.txt的每一行显示text.txt。 这是我的密码: param ( [Parameter(Mandatory=$True)][string] $textfile

我需要2.txt文件作为参数。database.txt的格式如下(名称、地址、日期):
迈克尔,随机街1号,12月24日。
艾伦,随机街2号,12月24日。
凯文,随机街3号,12月24日

text.txt文件看起来像电子邮件,但重要的部分是:
名称:/Name/
地址:/Address/
日期:/Date/

我需要为database.txt的每一行显示text.txt。 这是我的密码:

param ( [Parameter(Mandatory=$True)][string] $textfile,
        [Parameter(Mandatory=$True)][string] $datafile )
$text = get-content .\$textfile
$data = get-content .\$datafile
$name = ($data.Split(",")[0])
$address = ($data.Split(",")[1])
$date = ($data.Split(",")[2])

foreach ($line in $textfile){

    $text -replace '/name/',$name
    $text -replace '/address/',$address
    $text -replace '/date/',$date
}
输出如下所示:

姓名:迈克尔
地址:/Address/
日期:/Date/

名称:/Name/
地址:random street 1
日期:/Date/

名称:/Name/
地址:/Address/
日期:12月24日

应该是这样的:

姓名:迈克尔
地址:random street 1
日期:12月24日

姓名:艾伦
地址:随机街2号
日期:12月24日

姓名:凯文
地址:随机街3号
日期:12月24日

因此,我的代码只识别第一行,并在不同的时间替换数据。我能做些什么来解决这个问题?我认为我的离职和/或离职与此有关。
我对powershell非常陌生,请尽量让解决方案尽可能简单。谢谢。

考虑一下这个例子:

$text = @"
Name: /name/
Address: /address/
Date: /date/
"@


$data = @"
Michael,random street 1,dec.24.
Allen,random street 2,dec.24.
Kevin,random street 3,dec.24.
"@

# Split the data into lines
$DataLines = $data -split "`n"

foreach ($line in $dataLines){
    $name = ($line.Split(",")[0])
    $address = ($line.Split(",")[1])
    $date = ($line.Split(",")[2])

    $text -replace '/name/',$name -replace '/address/',$address -replace '/date/',$date
}
出于演示目的,我将内容直接放在
$text
$data
变量中,但这是加载变量时所包含的内容

您最初的脚本有两个问题

  • 您希望迭代数据项(每行数据),而不是文本文件 --

  • 您希望有1个文本输出,而不是3个
  • replace语句在replace操作后在控制台中输出完整字符串。 不修改原始变量

    foreach ($line in $textfile){
    
        $text -replace '/name/',$name
        $text -replace '/address/',$address
        $text -replace '/date/',$date
    }
    
    基本上,您创建了文本的3个版本。 一个只替换名称,一个只替换地址,一个只替换日期

    你或者需要在一行中完成这一切

    $text -replace '/name/',$name -replace '/address/',$address -replace '/date/',$date
    
    或者将每个替换操作的结果赋给一个变量,以便在后续调用中重用:

    $MyTextOutput = $text -replace '/name/',$name 
    $MyTextOutput = $MyTextOutput -replace '/address/',$address 
    $MyTextOutput = $MyTextOutput -replace '/date/',$date
    $MyTextOutput
    

    在我看来,这就像一个csv:

    $text = get-content text.txt
    import-csv database.txt -header name,address,date | foreach {
      $text -replace '/name/',$_.name -replace '/address/',$_.address -replace '/date/',$_.date
    }
    
    $text = get-content text.txt
    import-csv database.txt -header name,address,date | foreach {
      $text -replace '/name/',$_.name -replace '/address/',$_.address -replace '/date/',$_.date
    }