我是PowerShell和脚本的新手。做了很多阅读和测试,这是我的第一篇文章 这是我想要做的。我有一个文件夹,其中包含每天运行的每个报告的子文件夹。每天都会创建一个新的子文件夹 子文件夹中的文件名相同,只有日期更改。 我想从昨天的文件夹中获取一个特定的文件 以下是我到目前为止的情况:
Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | where(get-date).AddDays(-1)
两个部分(管道前后)都有效。但是当我把它们组合起来时就失败了 我做错了什么?
答案 0 :(得分:1)
我做错了什么?
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'并且将允许一切'真实'通过。 0被删除,其余被允许。
Get-ChildItem | where Name -eq 'test.txt'
没有{}
的语法是一种语法,它希望Name
是通过管道输入的东西的属性(在这种情况下是文件名)并将它们与' test.txt'并且只允许具有该名称的文件对象通过。
Get-ChildItem | where Length
在这种情况下,它正在寻找的属性是Length(文件大小),并且没有给出比较,所以它回到了之前的“cast to true / false”事物。这将仅显示具有某些内容(非0长度)的文件,并且将丢弃0个大小的文件,例如。
好吧,这让我知道你的代码: Get-ChildItem | where(get-date).AddDays(-1)
没有{}
且只有一件事给了Where,它期望参数是属性名,并且将该属性的值转换为true / false以决定做什么。这就是说“过滤器中管道中的东西有一个名为("09/08/2016 14:12:06"
的属性(昨天的当前时间日期)),并且该属性的值是'truthy'”。没有文件有一个名为(昨天的日期)的属性,因此该问题会为每个文件读取$null
,而Where
会删除管道中的所有内容。
您可以像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
获取“最后但一个”的东西,按反向创建日期排序。
答案 1 :(得分:0)
尝试:
where {$_.lastwritetime.Day -eq ((get-date).AddDays(-1)).Day}
答案 2 :(得分:0)
您可以将结果传递给Sort
命令,并将其传递给Select
以获取第一个结果。
Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | Sort LastWriteTime -Descending | Select -First 1
答案 3 :(得分: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}
答案 4 :(得分: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 }