2015-09-04 112 views
3

我想監視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構建的完整路徑,但它起作用。

注:我想我剛剛得到觸發器重複的原因,將更新。

+1

能否請您發佈用於代碼'folderwatcher.ps1' – boeprox

+0

上述好吧公佈。這正是我迄今爲止能夠猜到的,只是一個開始。 – user3762977

回答

1

在這裏你去:

$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' 
} 
+0

您可以通過以下方式停止活動: Unregister-Event FileCreated – Dennis

+0

感謝Dennis,我試過了,請參閱上面的更新。 – user3762977

+0

@ user3762977 ..嗯你的批處理文件是做什麼的?似乎有一個問題.. – Dennis

相關問題