2015-03-19 67 views
-1

请帮忙。我找不到解决方案。 (Windows平台) 我需要:如何检查任何新文件的外观文件夹?

  1. 扫描的文件夹
  2. 如果您收到任何新的文件。
  3. 处理文件。
+0

你介意给你的问题增加一点信息吗?你想不断扫描一个事件吗?另外你想对新文件做什么? – CalebB 2015-03-19 13:12:11

+0

你到目前为止尝试过什么?请阅读[我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)。 – DavidPostill 2015-03-19 13:12:13

+0

不好意思。我需要每隔n次扫描一个文件夹。 如果有新文件>运行该实用程序。 我不明白如何检查任何新文件。我只知道如何检查一个具体的名字。 – shallrise 2015-03-19 13:18:06

回答

0

不知道究竟你想执行什么,这是我的全部可以提供。您理论上每隔1小时将其作为计划任务运行:

foreach ($file in (Get-ChildItem "C:\TargetDirectory" | where {$_.lastwritetime -gt (Get-Date).AddHours(-1)})) { 
    # Execute-Command -Target $file 
} 
+0

非常感谢。我会试试这个。 – shallrise 2015-03-19 13:52:55

+0

简化了一下 – 2015-03-19 14:00:29

0

您可以使用FileSystemWatcher class来监视新文件的文件夹。

它可以很容易地used from PowerShell还有:

$FSW = New-Object System.IO.FileSystemWatcher 

然后使用Register-ObjectEvent“监听”从它引发的事件

+0

非常感谢。 – shallrise 2015-03-19 13:53:35

1

检测“新文件”的另一种方法是存档属性。无论何时创建或更改文件,该属性均由Windows设置。

无论何时处理文件,取消设置它的存档属性(attrib -a file.ext)。

好处是,你不依赖任何时间。

要列出“新”(或改变)文件,请使用dir /aadir /a-a将列出处理的文件)

更多相关信息请参见dir /?attrib /?

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”该场所存在的文件,所以在我的剧本,你会看到,我开始运行扫描现有文件。

  • 当FSW确实触发你希望它一次只处理一个文件。由于下一个文件创建事件将生成一个新的“objectevent”。构建FSW以在每个触发器上处理多个文件最终会导致崩溃。
相关问题