2015-03-19 81 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以在每個觸發器上處理多個文件最終會導致崩潰。