读入两个文本文件列表,并从文本文件中写出1行

时间:2012-08-22 11:23:45

标签: windows loops powershell scripting

我需要创建一个PowerShell脚本,用脚本读入两个文本文件。 第一个列表用于标识将附加文件的远程计算机。 第二个列表是需要附加到文件的关键短语。

清单1: 计算机1 计算机2 COMPUTER3

清单2: ABC DEF GHI

脚本会循环遍历每个指向每个远程计算机上的文件C:\ temp \ help.txt,并从列表2中写入1行。

所以示例:当脚本运行时,它转到列表1,发现计算机1是第一个并打开文件\ computer1 \ C $ \ temp \ help.txt,然后它将从列表2中获取第一行写入文件ABC。关闭文件并转到计算机2.计算机2将是\ computer2 \ C $ \ temp \ help.txt并从列表2中获取第二项并写入DEF保存并继续。

很难找到任何帮助阅读并循环浏览2个列表。或者我想错了。我已经得到Get-Content来读取文件和foreach($ x for text1)可以通过1个文本文件循环,但无法弄清楚如何遍历第二个文本文件。

1 个答案:

答案 0 :(得分:2)

处理并排数组始终是一种痛苦,并且往往容易出错。理想情况下,如建议的那样,计算机名称和字符串将以CSV或其他形式组合在一起。

但是,这样的事情应该让你走上正轨。您可能需要稍微调整字符串开头/结尾处的换行符。

$machines = Get-Content .\MachineList.txt
$strings = Get-Content .\StringsList.txt

if($machines.Count -ne $strings.Count){ throw 'Counts do not match' }

for($i = 0; $i -lt $strings.Count; $i++)
{
  $path = "\\$($machines[$i])\C`$\temp\help.txt"   # unc path
  $strings[$i] | Add-Content $path
}

如果您使用CSV格式

Config.csv
---------
ComputerName,String
machine1,string1
machine2,string2
machine3,string3

然后你可以简化到这个:

Import-Csv .\Config.csv |%{
  $_.String | Add-Content "\\$($_.ComputerName)\C`$\temp\help.txt"
}