2017-10-18 71 views
1

當文件夾中創建文件時,需要觸發命令行操作。 在我的情況下,當我創建n - 腳本啓動的文件夾中的文件.cmdn - 次。 如何在我有多個創建的文件時僅啓動.cmd腳本?如何在創建文件時監視文件夾並觸發命令行操作

### SET FOLDER TO WATCH 
    $watcher = New-Object System.IO.FileSystemWatcher 
    $watcher.Path = "C:\fso" 
    $watcher.Filter = "*.xls" 
    $watcher.EnableRaisingEvents = $true 

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED 
    $action = { Start-Process cmd.exe "/c D:\Users\xfirebg\Desktop\excel\append.cmd" 
       }  
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action 
    while ($true) {sleep 20} 
+0

當您在一個目錄中同時寫入多個文件時,事件會一個接一個地發生。如果你沒有對每個事件感興趣,爲什麼不每隔n秒輪詢目錄。另一種解決方案是兩個開始你的過程每n個事件,而不是每個事件。 – JPBlanc

+0

是的,如何做第二個解決方案? –

+0

第一個解決方案不是un option,因爲cmd腳本將xls轉換爲pdf並將其移動到另一個文件夾(xls)。此用戶再次在fso文件夾中創建xls文件後。所以在這個文件夾中我總是有pdf。 –

回答

0

以下是每n個事件而不是每個事件啓動您的過程的方法。

我使用一個對象作爲參數,我在每個調用中都會收到這個參數。

### SET FOLDER TO WATCH 
    $watcher = New-Object System.IO.FileSystemWatcher 
    $watcher.Path = "C:\temp" 
    $watcher.Filter = "*.tmp" 
    $watcher.EnableRaisingEvents = $true 

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED 
    $action = { 
     Write-host "coucou $($event.MessageData.counter)"; 
     $event.MessageData.counter +=1 
     if ($event.MessageData.counter % 3 -eq 0){ 
     Write-host "Bingo !" 
     } 
    }  
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    $obj = [PSCustomObject]@{"counter" = 0} 
    Register-ObjectEvent $watcher "Created" -Action $action -SourceIdentifier "test" -MessageData $obj 
Wait-Event -SourceIdentifier "test" 
+0

感謝您的回覆。這很有趣。但它不適合我的情況。如果用戶複製文件夾中的一個或兩個文件會怎麼樣?腳本不會啓動。如果文件夾中有一個或多個文件,我需要腳本才能啓動它。 –

+0

我的市長問題是。當.cmd腳本在短時間內多次啓動時,它們互相沖突。我需要更多時間來完成.cmd腳本的工作 –

相關問題