首页 文章

PowerShell查找最新文件

提问于
浏览
0

我是PowerShell和脚本的新手 . 做了很多阅读和测试,这是我的第一篇文章 .
这是我想要做的 . 我有一个文件夹,其中包含每天运行的每个报告的子文件夹 . 每天都会创建一个新的子文件夹 .
子文件夹中的文件名相同,只有日期更改 . 我想从昨天的文件夹中获取一个特定的文件 .
这是我到目前为止:

Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | where(get-date).AddDays(-1)

两个部分(管道前后)都有效 . 但是当我把它们组合起来时就失败了我究竟做错了什么?

5 回答

  • 0

    get-date | Get-Member -MemberType Property 读取输出,然后应用Where-Object docs

    Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | `
        Where-Object {$_.LastWriteTime.Date -eq (get-date).AddDays(-1).Date}
    
  • 0

    我做错了什么?

    0,1,2,3,4,5 | Where { $_ -gt 3 }
    

    这将比较来自管道的输入数字( $_ )和 3 ,并允许大于3的事物超过它 - 只要 $_ -gt 3 测试评估为$ True .

    0,1,2,3,4,5 | where { $_ }
    

    这没有什么可比的 - 在这种情况下,它casts the value to boolean - 'truthy' or 'falsey'并且将允许一切'truthy'通过 . 0被删除,其余被允许 .

    Get-ChildItem | where Name -eq 'test.txt'
    

    没有 {} 是一种语法,它希望 Name 是通过管道传递的东西的属性(在本例中是文件名),并将它们与'test.txt'进行比较,并且只允许具有该名称的文件对象通过 .

    Get-ChildItem | where Length
    

    在这种情况下,它正在寻找的属性是长度(文件大小),并且没有给出比较,所以它回到了之前的“转换为真/假”的事情 . 这将仅显示具有一些内容(非0长度)的文件,并且例如将丢弃0个大小的文件 .

    好的,这会带我到你的代码:

    Get-ChildItem | where(get-date).AddDays(-1)
    

    没有 {} 并且只有一件事给了Where,它期望参数是属性名称,并且将该属性的值转换为true / false以决定要做什么 . 这就是说“过滤器中管道中的东西有一个名为( "09/08/2016 14:12:06" (昨天的当前时间日期))的属性,并且该属性的值为'truthy'” . 没有文件有一个名为(昨天的日期)的属性,因此该问题读取每个文件的 $nullWhere 从管道中删除所有内容 .

    您可以像Jimbo一样回答,并过滤将文件的写入时间与昨天的日期进行比较 . 但是如果您知道文件和文件夹是按日期顺序命名的,那么您可以保存 - 遍历整个文件夹树并查看所有内容,因为您知道将调用昨天的文件 .

    虽然你没有说,你可以采取类似的做法

    $yesterday = (Get-Date).AddDays(-1).ToString('MM-dd-yyyy')
    Get-ChildItem "d:\receive\bhm\$yesterday\MBVOutputQueriesReport_C12_Custom.html"
    
    # (or whatever date pattern gets you directly to that file)
    

    要么

    Get-ChildItem | sort -Property CreationTime -Descending | Select -Skip 1 -First 1
    

    获得“最后但一个”的东西,按反向创建日期排序 .

  • 0

    尝试:

    where {$_.lastwritetime.Day -eq ((get-date).AddDays(-1)).Day}
    
  • 1

    您可以将结果传递给 Sort 命令,并将其传递给 Select 以获取第一个结果 .

    Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | Sort LastWriteTime -Descending | Select -First 1
    
  • 0

    可以做这样的事情 .

    $time = (get-date).AddDays(-1).Day
    Get-ChildItem -Filter "MBVOutputQueriesReport_C12_Custom.html" -Recurse -Path  D:\BHM\Receive\ | Where-Object { $_.LastWriteTime.Day -eq $time }
    

相关问题