0

我正在尝试从 CSV 文件中获取值。

如果今天的日期 = DateInCSVFile,则给出“关键”值。

密钥.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

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

4

2 回答 2

0

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

它为一位数的日子创建0-left-padding 数字,例如6,而 CSV 中的日期没有这样的填充。

因此,更改Get-Date -format dd-MMMGet-Date -format d-MMMd而不是dd)应该可以解决您的问题。

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

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

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

于 2018-06-06T20:19:49.180 回答
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 中的日期与当天匹配,则输出密钥

于 2018-06-06T17:33:25.330 回答