我有一个脚本,该脚本以for
循环运行。
它输出3个变量:$A
,$B
和$C
。
我希望在每次迭代时都将这3个变量输出到文件内的同一行上,而不是标准输出(每个输出都用逗号分隔)。 我想添加一个标题。我正在创建一个CSV文件。
我已经看到了几种在CSV文件中而不是在for
循环中输出变量的方法。
是否可以将这三个变量串联起来并将其附加到文件中?
Write-Host $A ',' $B ',' $C | Out-File -FilePath C:\temp\TEST.csv -Append
答案 0 :(得分:0)
$A = 'foo'
$B = 'bar'
$C = 'baz'
"$A,$B,$C" # outputs Foo,Bar,Baz
但是,如果您使用的是CSV,首选的方法是使用Import-Csv
和Export-Csv
,它们可以为您处理格式。
答案 1 :(得分:0)
Write-Host
的输出直接进入主机控制台。它不能通过管道传输。另外,正如已经提到的,在处理CSV时,您通常希望使用Import-Csv
和Export-Csv
cmdlet(特别是因为您想要带有标头的CSV)。
要以Export-Csv
可以导出的形式获取一堆变量,请构造一个自定义对象,如下所示:
New-Object -Type PSObject -Property @{
'X' = $A
'Y' = $B
'Z' = $C
} | Export-Csv 'C:\Temp\test.csv' -NoType
属性哈希表的键成为CSV的列标题。
由于您说要从for
循环中导出数据,因此需要将参数-Append
添加到Export-Csv
:
for (...) {
New-Object ... | Export-Csv 'C:\Temp\test.csv' -NoType -Append
}
这是因为for
循环不会写入管道,这意味着这样的操作将不起作用:
for (...) {
New-Object ...
} | Export-Csv 'C:\Temp\test.csv' -NoType
但是,根据实际循环的样子,您可以用范围运算符(..
)和ForEach-Object
循环的组合来代替它:
1..5 | ForEach-Object {
New-Object ...
} | Export-Csv 'C:\Temp\test.csv' -NoType
答案 2 :(得分:0)
提供的at each iteration to outout those 3 variables
不表示文字,
您可以通过PSCustomObject
收集变量的for循环输出,然后Export-Csv
收集结果。
为演示一个简单的计数循环:
$Result = for ($i=1;$i -lt 5;$i++){[pscustomobject]@{X=$i;Y=$i+1;Z=$i+2}}
$Result
X Y Z
- - -
1 2 3
2 3 4
3 4 5
4 5 6
然后导出/转换为Csv:
$Result|ConvertTo-Csv -NoTypeInformation
"X","Y","Z"
"1","2","3"
"2","3","4"
"3","4","5"
"4","5","6"