在CSV文件中查找值并与今天的日期进行比较

时间:2018-06-06 14:38:26

标签: powershell csv import-csv

我试图从CSV文件中获取值。

  

如果今天的日期= DateInCSVFile,则提供"键"值。

Keys.csv

Guest,Key
1-Jun,OIOMY-ZFILZ
2-Jun,LSSJC-PDEUL
3-Jun,MQNVJ-TETLV
4-Jun,HCJIJ-ECVPY
5-Jun,SPACR-AJSLU
6-Jun,MEURS-UQTVX

代码:

$today = Get-Date -format dd-MMM
$keys = import-csv c:\office\keys.csv -Header @(1..2)
$data = $keys | ? { $_.1 -match $today}
Write-Host $data.2

我尝试了foreachif命令。没有任何效果。

2 个答案:

答案 0 :(得分:0)

我可以想到几个选择。如果你想要快速和肮脏的东西,试试:

$stuff = Import-Csv -Path .\stuff.csv 

foreach ($thing in $stuff) {
    if ( $thing.Guest  -eq $(Get-date -Format 'd-MMM') ) {
        Write-Output $thing.Key
    }
}

我将CSV文件的内容导入变量。我遍历每一行。如果Guest中的一天与当天匹配,我输出密钥

答案 1 :(得分:0)

代码的唯一问题是您的日期格式dd-MMM ,正如LotPings所示:

它创建0 - 单位数天的左填充数字,例如6,而CSV中的日期没有这样的填充。

因此,将Get-Date -format dd-MMM更改为Get-Date -format d-MMM(仅d而不是dd)可以解决您的问题。

但是,鉴于您无论如何都要将整个文件读入内存,您可以优化命令到(PSv4 +):

$today = Get-Date -Format d-MMM
(Import-Csv c:\office\keys.csv).Where({ $_.Guest -eq $today }).Key

另请注意,-match的目的是执行基于正则表达式的匹配,而不是(不区分大小写)字符串相等;使用-eq作为后者。