Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 仅从当前日期获取文件_Powershell_Where Clause - Fatal编程技术网

Powershell 仅从当前日期获取文件

Powershell 仅从当前日期获取文件,powershell,where-clause,Powershell,Where Clause,对于大多数Powershell程序员来说,这可能非常容易,但我对Powershell完全是新手,并且对一个简单的Where对象查询感到沮丧 我正在从文件夹中收集csv: $files = Get-ChildItem $home\desktop\test\*.csv -Recurse 所以输出是这样的: Mode LastWriteTime Length Name

对于大多数Powershell程序员来说,这可能非常容易,但我对Powershell完全是新手,并且对一个简单的Where对象查询感到沮丧

我正在从文件夹中收集csv:

$files = Get-ChildItem $home\desktop\test\*.csv -Recurse
所以输出是这样的:

Mode                LastWriteTime         Length Name                                                                                                  
----                -------------         ------ ----                                                                                                  
-a----       01.09.2020     11:38             16 a.csv                                                                          
-a----       01.09.2020     11:38             10 b.csv                                                                              
-a----       31.08.2020     13:39             10 c.csv                                                                              
-a----       01.09.2020     11:38             14 d.csv                                                                          
-a----       31.08.2020     13:39             14 e.csv                                                                          
-a----       31.08.2020     13:38             16 f.csv                                                                        
-a----       31.08.2020     13:40             17 g.csv                                                                                                                                           
$date = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0)
$files = Get-ChildItem $home\desktop\test\*.csv -Recurse
$files2 = $files | Where-Object {$_.LastWriteTime -gt $date}
$files2
等等。。到现在为止,一直都还不错。但现在我只需要与当前日期匹配的.csv文件。因此,就我的理解而言,我必须:

$date = $(get-date)
$files2 = $files | Where-Object {($_.LastWriteTime -eq $date)}

但是变量files2中的结果为空。我不知道为什么:(

即使Powershell在写入主机时会像字符串一样表示
LastWriteTime
LastWriteTime
实际上是
DateTime
类型

$files = Get-ChildItem $home\desktop\test\*.csv -Recurse
$files.LastWriteTime[0].GetType()
这意味着,反过来,where子句表示“获取LastWriteTime等于当前时间的所有文件”,其中当前时间是运行Get Date的确切时刻。显然,除非您恰好在同一时刻编写文件,或者玩弄系统时间,或者其他一些边缘情况,否则这永远不会是什么

要解决此问题,请获取DateTime对象并将时间设置为一天的开始,如下所示:

$date = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0)
然后,搜索
LastWriteTime
大于此值的文件

$files2 = $files | Where-Object {($_.LastWriteTime -gt $date)}
完整脚本应如下所示:

Mode                LastWriteTime         Length Name                                                                                                  
----                -------------         ------ ----                                                                                                  
-a----       01.09.2020     11:38             16 a.csv                                                                          
-a----       01.09.2020     11:38             10 b.csv                                                                              
-a----       31.08.2020     13:39             10 c.csv                                                                              
-a----       01.09.2020     11:38             14 d.csv                                                                          
-a----       31.08.2020     13:39             14 e.csv                                                                          
-a----       31.08.2020     13:38             16 f.csv                                                                        
-a----       31.08.2020     13:40             17 g.csv                                                                                                                                           
$date = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0)
$files = Get-ChildItem $home\desktop\test\*.csv -Recurse
$files2 = $files | Where-Object {$_.LastWriteTime -gt $date}
$files2

非常感谢。所以我已经很接近了,但到目前为止…谢谢你的解释。现在我知道如何更好地处理获取日期:)