我想监视 Windows 7 文件夹,并在将任何新文件添加到该文件夹时运行 .bat 文件。看来我应该能够使用安装在计算机上的 powershell 来执行此操作。
我读过一些答案,例如this one但我还无法通过修改我所看到的内容来使任何东西发挥作用。细节:
要监视的文件夹:
c:\aaa\bbb\monitorThis
每当 .htm 文件添加到受监视文件夹时运行的批处理文件:
c:\aaa\bbb\runA.bat
Powershell脚本文件:
c:\aaa\bbb\folderWatcher.ps1
有人可以描述folderWatcher.ps1 的内容应该是什么样子,包括包含运行.bat 文件的命令、注册和取消注册事件等的行吗?
另外,右键单击.ps1文件并选择“使用PowerShell运行”是否是启动监控的方式,如果是,如何停止?
UPDATE:
根据要求,这是我到目前为止对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。
更新二
我尝试了下面丹尼斯的代码,但我什么也没得到。我只是仔细检查了我的所有路径,以确保它们与他所拥有的相同。我还刚刚制作了一个具有更简单路径的新测试版本,因此我可以准确发布我所拥有的内容,而无需匿名:
$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
其中包含上面的代码。
当我右键单击它并选择“使用 PowerShell 运行”时,控制台窗口会闪烁一些文本,但在关闭之前速度太快,无法阅读。
当我将 .htm 文件拖入C:\Developer\psTest
, 什么都没发生。
我将注销代码放入一个名为FolderWatcherStop.ps1的文件中,当我单击该文件时,控制台会闪烁一些红色文本,同样太快而无法阅读,然后它关闭。
我究竟做错了什么?有件事我确信。
更新三
按照丹尼斯的建议,我成功了。这需要稍微修改批处理文件以包含我想要运行的 ANT 构建的完整路径,但它有效。
注意:我想我刚刚明白为什么触发器会重复,将会更新。