请帮助。我找不到解决方案。 (Windows平台) 我需要:
答案 0 :(得分:1)
检测"新文件的另一种方法"是归档属性。无论何时创建或更改文件,此属性都由Windows设置。
每当您处理文件时,请取消设置其归档属性(attrib -a file.ext
)。
优点是,你不依赖于任何时间。
列出" new" (或更改)文件,使用dir /aa
(dir /a-a
将列出已处理的文件)
了解更多信息,请参阅dir /?
和attrib /?
答案 1 :(得分:0)
您可以使用FileSystemWatcher
class来监控新文件的文件夹。
它也很容易used from PowerShell:
$FSW = New-Object System.IO.FileSystemWatcher
然后使用Register-ObjectEvent
来"听"从它筹集的事件
答案 2 :(得分:0)
如果不确切知道您要执行的是什么,这就是我能提供的全部内容。理论上,您每1小时将其作为计划任务运行:
foreach ($file in (Get-ChildItem "C:\TargetDirectory" | where {$_.lastwritetime -gt (Get-Date).AddHours(-1)})) {
# Execute-Command -Target $file
}
答案 3 :(得分:0)
FileSystemWatcher是我最近学到的一个实用程序,将来一定会使用它。最好的部分是它依赖于.net事件,因此您不需要构建外部触发结构。
以下是我在24/7生产环境中使用它的示例(完整脚本接收xml,处理它,并在3秒内将结果插入SQL)。
Function submit-resultFile {
#Actual file processing takes place here
}
Function create-fsw {
Register-ObjectEvent $fsw Created -SourceIdentifier "Spectro FileCreated" -Action {
$name = $Event.SourceEventArgs.Name
$File = $Event.SourceEventArgs.Fullpath
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Verbose "The file '$name' was $changeType at $timeStamp" -fore green
submit-ResultFile -xmlfile $file
}
}
# In the following line, you can change 'IncludeSubdirectories to $true if required.
$fsw = New-Object IO.FileSystemWatcher $watchFolder, $watchFilter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
$xmlFiles = Get-ChildItem -Path $ResultsDirectory -Filter *.xml
foreach ($file in $xmlfiles)
{
submit-ResultFile -xmlfile $File.FullName
}
Create-fsw
# Register a new File System Watcher
要注意的几个要点: - 如果在创建FSW之前该位置存在文件,它们将不会触发“objectevent”,因此在我的脚本中,您将观察到我开始对现有文件进行扫描。