我是PowerShell和脚本的新手 . 做了很多阅读和测试,这是我的第一篇文章 .
这是我想要做的 . 我有一个文件夹,其中包含每天运行的每个报告的子文件夹 . 每天都会创建一个新的子文件夹 .
子文件夹中的文件名相同,只有日期更改 . 我想从昨天的文件夹中获取一个特定的文件 .
这是我到目前为止:
Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | where(get-date).AddDays(-1)
两个部分(管道前后)都有效 . 但是当我把它们组合起来时就失败了我究竟做错了什么?
5 回答
从
get-date | Get-Member -MemberType Property
读取输出,然后应用Where-Object docs:这将比较来自管道的输入数字(
$_
)和3
,并允许大于3的事物超过它 - 只要$_ -gt 3
测试评估为$ True .这没有什么可比的 - 在这种情况下,它casts the value to boolean - 'truthy' or 'falsey'并且将允许一切'truthy'通过 . 0被删除,其余被允许 .
没有
{}
是一种语法,它希望Name
是通过管道传递的东西的属性(在本例中是文件名),并将它们与'test.txt'进行比较,并且只允许具有该名称的文件对象通过 .在这种情况下,它正在寻找的属性是长度(文件大小),并且没有给出比较,所以它回到了之前的“转换为真/假”的事情 . 这将仅显示具有一些内容(非0长度)的文件,并且例如将丢弃0个大小的文件 .
好的,这会带我到你的代码:
没有
{}
并且只有一件事给了Where,它期望参数是属性名称,并且将该属性的值转换为true / false以决定要做什么 . 这就是说“过滤器中管道中的东西有一个名为("09/08/2016 14:12:06"
(昨天的当前时间日期))的属性,并且该属性的值为'truthy'” . 没有文件有一个名为(昨天的日期)的属性,因此该问题读取每个文件的$null
,Where
从管道中删除所有内容 .您可以像Jimbo一样回答,并过滤将文件的写入时间与昨天的日期进行比较 . 但是如果您知道文件和文件夹是按日期顺序命名的,那么您可以保存 - 遍历整个文件夹树并查看所有内容,因为您知道将调用昨天的文件 .
虽然你没有说,你可以采取类似的做法
要么
获得“最后但一个”的东西,按反向创建日期排序 .
尝试:
您可以将结果传递给
Sort
命令,并将其传递给Select
以获取第一个结果 .可以做这样的事情 .