簡體   English   中英

如何在將文件添加到目錄時運行Windows批處理或Perl腳本?

[英]How can I get a Windows batch or Perl script to run when a file is added to a directory?

我正在嘗試編寫一個腳本來解析本地文件並將其內容上傳到MySQL數據庫。 現在,我認為運行Perl腳本的批處理腳本可以工作,但我不確定這是否是實現此目的的最佳方法。

另外,我希望在將數據文件添加到某個目錄時立即運行此腳本。 這在Windows中可行嗎?

思考? 反饋? 我是Perl和Windows批處理腳本的新手,所以任何指導都會受到贊賞。

您可以使用Win32 :: ChangeNotify 將文件添加到目標目錄時,將通知您的腳本。

將一個使用FileSystemWatcher類的小型C#應用程序放在一起來檢測添加到文件夾中的文件,然后生成所需的腳本並不難。 與定期輪詢文件夾相比,它肯定會使用更少的CPU /系統資源/硬盤帶寬。

可以使用WMI功能實現檢查新創建文件的文件夾。 也就是說,您可以創建一個Perl腳本,該腳本訂閱__InstanceCreationEvent WMI事件,該事件跟蹤CIM_DirectoryContainsFile類實例的創建。 一旦觸發了這種事件,您就知道文件夾中添加了一個新文件,可以根據需要對其進行處理。

這些文章提供了有關該主題的更多信息,並包含VBScript代碼示例(希望您將它們轉換為Perl並不困難):

你想要的功能是ReadDirectoryChangesW 快速搜索perl包裝器會生成此Win32 :: ReadDirectoryChanges模塊。

你的腳本看起來像這樣:

use Win32::ReadDirectoryChanges;

$rdc = new Win32::ReadDirectoryChanges(path    => $path,
                                       subtree => 1,
                                       filter  => $filter);

while(1) {
    @results = $rdc->read_changes;

    while (scalar @results) {
      my ($action, $filename) = splice(@results, 0, 2);
      ... run script ...
    }
}

您可以使用File::ChangeNotify在Perl中輕松實現此目的。 該模塊可在CPAN上找到: http//search.cpan.org/dist/File-ChangeNotify/lib/File/ChangeNotify.pm

您可以將代碼作為守護程序或服務運行,使其監視一個或多個目錄,然后在某些條件匹配時自動執行某些代碼(或啟動腳本)。

最重要的是,它是跨平台的,所以如果你想切換到Linux機器或Mac,它仍然可以工作。

你需要考慮什么是足夠的啟發式來確定“修改”。

按成本和准確度遞增順序:

  1. 文件大小(只要保持大小,文件內容仍然可以更改)

  2. 文件時間戳(如果你沒有運行ntpd時間不是單調的)

  3. 文件sha1sum(防彈但價格昂貴)

我將運行ntpd,然后遍歷時間戳,然后比較時間戳更改時的校驗和。 這可以在很短的時間內覆蓋很多地方。

這些方法不適用於計算機安全應用程序,它們用於理智系統上的文件管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM