我想在过去24小时内检查文件夹中是否有新文件。我写了这个小脚本,但效果不佳。
$folder = 'C:\Users\XMAN\Desktop\Unfug\'
$filter = '*'
$date = (Get-Date).addDays(-1)
if (Get-ChildItem -Path $folder -Recurse -Force | ForEach-Object { $_.FullName}| Where-Object {$_.lastwritetime} -gt $date){
Write-Host $._FullName -fore green
}else{
Write-Host "I have nothing to do."
}
我知道您有一些想法。 :D
格拉西亚斯!
答案 0 :(得分:0)
您的管道顺序错误:
$newFiles = Get-ChildItem -Path $folder -Recurse -Force -File |
Where-Object CreationTime -gt $date |
Select-Object -ExpandProperty FullName
if ($newFiles)
{
foreach ($file in $newFiles)
{
Write-Host $file -ForegroundColor Green
...
您正在从对象中删除属性,然后对其进行过滤。另外,您正在过滤LastWriteTime
,如果您正在寻找 new 文件,这将是不准确的,所以我在答案中过滤了CreationTime
。>
答案 1 :(得分:0)
这行是您的问题:
if (Get-ChildItem -Path $folder -Recurse -Force | ForEach-Object { $_.FullName} |...)
该行仅返回文件路径,并沿管道发送字符串列表。因此,您获取了一个对象,获取了一个属性(全名),然后将其传递到where-object并检查了不再存在的ModifiedDate。
您可能想要这样的东西来完成此任务:
$folder = 'C:\ps-files\ClaimRedrop'
$filter = '*'
$date = (Get-Date).addDays(-1)
#Check if files exist outside of if statement. This is better for readability
$FileCheck = Get-ChildItem -Path $folder -Recurse -Force |
Where-Object {$_.lastwritetime -gt $date}
if ($FileCheck){
# Avoid using Write-Host where possible. Whenever possible write to output or default
$FileCheck | ForEach-Object {Write-Output $._FullName}
}
else{
Write-Output "I have nothing to do."
}