当文件被添加到文件夹时,Powershell脚本运行.bat文件

我想监视Windows 7文件夹,并有一个.bat文件运行时,任何新的文件被添加到文件夹。 看来我应该能够使用PowerShell,这是安装在计算机上。

我已经阅读了一些这样的答案,但是我不能通过修改我看到的东西来获得任何工作。 细节:

要监视的文件夹:

c:\aaa\bbb\monitorThis 

要将.htm文件添加到受监控文件夹时运行batch file:

 c:\aaa\bbb\runA.bat 

Powershell脚本文件:

 c:\aaa\bbb\folderWatcher.ps1 

有人可以描述一下folderWatcher.ps1的内容应该是什么样子,包括包含运行.bat文件命令的行,注册和注销事件,等等。

另外,右键单击.ps1文件并select“使用PowerShell运行”来启动监控,如果是这样,那么如何停止它?

更新:

按照要求,这是我到目前为止folderWatcher.ps1,但这只是一个开始,从我见过的想法:

 $folder = "c:\aaa\bbb\toConvert" $filter = "*.*" $fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{ IncludeSubDirectories=$false NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' } $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { Start-Process cmd -ArgumentList "/c runA.bat" -WorkingDirectory "C:\aaa\bbb" } 

注意:重新筛选,我不关心添加什么样的文件,因为我们只会把.htm文件放在该文件夹,所以添加到它的任何东西,我想触发.bat。

更新二

我尝试了下面的Dennis的代码,但是我什么也没得到。 我只是仔细检查了所有的path,以确保它们与他所拥有的相同。 我也做了一个简单的path的新的testing版本,所以我可以张贴我所拥有的,而不必匿名:

  $folder = 'C:\Developer\psTest' # Enter the root path you want to monitor. $filter = '*.htm' # You can enter a wildcard filter here. $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { $name = $Event.SourceEventArgs.Name $changeType = $Event.SourceEventArgs.ChangeType $timeStamp = $Event.TimeGenerated Write-Host "The file '$name' was $changeType at $timeStamp" -fore green cmd.exe /c 'C:\Developer\psTest\runAnt.bat' } 

要清楚我在做什么:

我有一个名为C:\Developer\psTest\FolderWatcherTest.ps1 ,它包含上面的代码。

当我右键单击它并selectRun with PowerShell时,控制台窗口会闪烁一些文字,但在closures之前读取速度太快。

当我然后拖动一个.htm文件到C:\Developer\psTest ,没有任何反应。

我把取消注册的代码放到一个名为FolderWatcherStop.ps1的文件中,当我点击它时,控制台闪烁着一些红色的文字,再次快速阅读,然后closures。

我究竟做错了什么? 我确定的东西。

更新三

遵循丹尼斯的build议,我得到了这个工作。 这需要修改batch file,以包含我想要运行的ANT构build的完整path,但是它可以工作。

注:我想我只是知道为什么触发器重复,将更新。

干得好:

 $folder = 'f:\test' # Enter the root path you want to monitor. $filter = '*.html' # You can enter a wildcard filter here. $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { $name = $Event.SourceEventArgs.Name $changeType = $Event.SourceEventArgs.ChangeType $timeStamp = $Event.TimeGenerated Write-Host "The file '$name' was $changeType at $timeStamp" -fore green write-host "test" Invoke-Item 'f:\test\test.bat' }