逗号分隔PowerShell中的2个值

时间:2018-02-09 08:27:19

标签: powershell

我列出了目录中的文件及其纪元时间(在Linux机器上使用,用于集中文件管理)。

我遇到问题,要在两个字段之间用逗号加入。

文件夹结构

C:\ TEMP \测试
 test1.txt的
 的test2.txt

预期产出:

File: test1.txt,1518167449     
File: test2.txt,1518167449

我拥有以下所有信息:

(Get-ChildItem C:\temp\test | select name, @{name='lastwritetime';Expression={[int][double]::Parse((Get-Date $_.LastWriteTime -UFormat %s))}})

给出输出

Name        lastwritetime  
test1.txt   1518167449  
test2.txt   1518167455

但是我无法加入他们,所以他们看的格式正确(使用逗号加入)。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

$Files = (Get-ChildItem C:\temp\test | select name, @{name='lastwritetime';Expression={[int][double]::Parse((Get-Date $_.LastWriteTime -UFormat %s))}})

$Files | ForEach-Object {
    "$($_.Name),$($_.LastWriteTime)"
}

这使用一个ForEach-Object循环遍历每个文件并输出一个字符串。该字符串使用子表达式$( )来允许我们访问我们想要的两个属性,并在字符串中用逗号插入它们。

请注意,您不必使用$Files变量,而是可以在ForEach-Object的末尾链接Select命令,但因为该命令已经很长这使代码更清晰。

另一种选择是:

$Files | ForEach-Object {
    "{0},{1}" -f $_.Name,$_.LastWriteTime
}

由您决定更具可读性。

您还可以考虑使用ConvertTo-CSV cmdlet,尽管这也会在每个值周围添加引号。如果您的最终目的地是CSV,但使用它或Export-CSV更清洁/更简单。