我想監視Windows 7文件夾,並在將任何新文件添加到文件夾時運行.bat文件。看來我應該能夠使用PowerShell來安裝在計算機上。將文件添加到文件夾時運行.bat文件的Powershell腳本
我讀過一些答案,如this one,但我無法通過修改我所看到的任何東西來工作。詳細信息:
文件夾監控:
c:\aaa\bbb\monitorThis
批處理文件來運行,每當一個.htm文件添加到監視的文件夾:
c:\aaa\bbb\runA.bat
PowerShell腳本文件:
c:\aaa\bbb\folderWatcher.ps1
有人可以描述folderWatcher.ps1的內容應該是什麼樣子,包括包含co的行命令來運行.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。
UPDATE II
我試圖將代碼從丹尼斯之下,但我什麼也沒得到。我只是仔細檢查了所有的路徑,以確定它們與他所擁有的相同。我也只是做了一個新的測試版本,用更簡單的路徑,所以我可以什麼我張貼,而無需匿名:
$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
。
當我右鍵單擊它並選擇Run with PowerShell時,控制檯窗口會閃爍一些文字,但在關閉之前讀取速度太快而無法讀取。
當我然後拖動.htm文件到C:\Developer\psTest
,什麼也沒有發生。
我將註銷代碼放入一個名爲FolderWatcherStop.ps1的文件中,當我點擊該文件時,控制檯閃爍着一些紅色文本,再次快速閱讀,然後關閉。
我在做什麼錯?我確定的東西。
UPDATE III
繼丹尼斯的意見,我得到了這個工作。這需要稍微修改該批處理文件以包含我想要運行的ANT構建的完整路徑,但它起作用。
注:我想我剛剛得到觸發器重複的原因,將更新。
能否請您發佈用於代碼'folderwatcher.ps1' – boeprox
上述好吧公佈。這正是我迄今爲止能夠猜到的,只是一個開始。 – user3762977