如何检查任何新文件中的外观文件夹?

时间:2015-03-19 13:05:27

标签: windows powershell cmd

请帮助。我找不到解决方案。 (Windows平台) 我需要:

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

4 个答案:

答案 0 :(得分:1)

检测"新文件的另一种方法"是归档属性。无论何时创建或更改文件,此属性都由Windows设置。

每当您处理文件时,请取消设置其归档属性(attrib -a file.ext)。

优点是,你不依赖于任何时间。

列出" new" (或更改)文件,使用dir /aadir /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”,因此在我的脚本中,您将观察到我开始对现有文件进行扫描。

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