जब कोई फ़ाइल बनाई जाती है या संपादित की जाती है, तो किसी फ़ोल्डर की निगरानी कैसे करें और कमांड-लाइन क्रिया को ट्रिगर कैसे करें?


82

मुझे अपनी विस्टा मशीन पर किसी प्रकार की स्क्रिप्ट सेट करने की आवश्यकता है, ताकि जब भी किसी फ़ाइल को किसी विशेष फ़ोल्डर में जोड़ा जाता है, तो यह स्वचालित रूप से एक पृष्ठभूमि प्रक्रिया को चलाता है जो फ़ाइल पर काम करता है। (पृष्ठभूमि प्रक्रिया सिर्फ एक कमांड-लाइन उपयोगिता है जो फ़ाइल नाम को एक तर्क के रूप में, कुछ अन्य पूर्वनिर्धारित विकल्पों के साथ लेती है।)

यदि संभव हो, तो प्रदर्शन और रखरखाव के कारणों के लिए, मैं मूल विंडोज सुविधाओं का उपयोग करके ऐसा करना चाहूंगा। मैंने टास्क शेड्यूलर का उपयोग करने पर ध्यान दिया है, लेकिन थोड़ी देर के लिए ट्रिगर सिस्टम को मना करने के बाद, मैं इसके बारे में ज्यादा समझ नहीं बना पाया हूं, और मुझे यकीन भी नहीं है कि अगर मुझे इसकी आवश्यकता है तो मैं ऐसा करने में सक्षम हूं।

मैं किसी भी सुझाव की सराहना करता हूँ। धन्यवाद!


लगता है जैसे आपको somethink की जरूरत है जैसे Linux के inotify, लेकिन विंडोज़ के लिए। Jnotify मदद कर सकता है, लेकिन चूंकि यह जावा बहुत भारी है।
कीथ

1
मैं इस बारे में भी सोच रहा था ... [MSDN पेज] ( msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx) पाया
कीथ

2
लिंक ऊपर है) aspx के बाद: msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
Sun

जवाबों:


92

काम पर हम फ़ोल्डर्स की निगरानी करने के लिए Powershell का उपयोग करते हैं।
इसे बिना किसी अतिरिक्त टूल के विंडोज विस्टा (.NET और पॉवरशेल प्रीइंस्टॉल्ड) के बाद से इस्तेमाल किया जा सकता है।

यह स्क्रिप्ट एक निश्चित फ़ोल्डर की निगरानी करती है और लॉगफ़ाइल लिखती है। आप कार्रवाई को प्रतिस्थापित कर सकते हैं और जो चाहें कर सकते हैं जैसे कि किसी बाहरी उपकरण को कॉल करें

उदाहरण लॉग फ़ाइल

11/23/2014 19:22:04, D: \ source \ New Text Document.txt, बनाया गया
11/23/2014 19:22:09, परिवर्तित, D: \ source \ New पाठ Document.txt
11/23/2014 19:22:09, परिवर्तित, D: \ source \ New पाठ Document.txt
11/23/2014 19:22:14, हटाए गए, D: \ source \ New पाठ Document.txt

StartMonitoring.ps1

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "D:\source"
    $watcher.Filter = "*.*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$(Get-Date), $changeType, $path"
                Add-content "D:\log.txt" -value $logline
              }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    Register-ObjectEvent $watcher "Changed" -Action $action
    Register-ObjectEvent $watcher "Deleted" -Action $action
    Register-ObjectEvent $watcher "Renamed" -Action $action
    while ($true) {sleep 5}

कैसे इस्तेमाल करे

  1. एक नई टेक्स्ट फ़ाइल बनाएँ
  2. उपरोक्त कोड को कॉपी और पेस्ट करें
  3. निम्नलिखित सेटिंग्स को अपनी आवश्यकताओं में बदलें:
    • मॉनिटर करने के लिए फ़ोल्डर: $watcher.Path = "D:\source"
    • केवल कुछ फ़ाइल प्रकारों को शामिल करने के लिए फ़ाइल फ़िल्टर: $watcher.Filter = "*.*"
    • उपनिर्देशिका शामिल करें हाँ / नहीं: $watcher.IncludeSubdirectories = $true
  4. इसे सहेजें और नाम बदलें StartMonitoring.ps1
  5. राइट क्लिक करके मॉनिटरिंग शुरू करें »PowerShell के साथ निष्पादित करें

निगरानी बंद करने के लिए, यह आपके PowerShell विंडो को बंद करने के लिए पर्याप्त है

आगे की पढाई


अच्छी तरह से काम करता है लेकिन स्टॉप स्क्रिप्ट का कार्य क्या है? मुझे त्रुटियां मिलती हैं: "अपंजीकृत-घटना: तर्क को 'SourceIdentifier' पर बाँध नहीं सकते क्योंकि यह अशक्त है।" pastebin.com/ugLB3a69
Jan Stanstrup

@JanStanstrup मैंने शायद दूसरी स्क्रिप्ट के साथ और लोगों को भ्रमित किया। मैं इसे हटा दूंगा। StartWatching.ps1निगरानी बंद करने के लिए बस अपनी खिड़की बंद करना पर्याप्त है । दूसरे पटकथा केवल चर को बचाने के लिए काम करता है अगर आप इसे अपने पहले स्क्रिप्ट में शामिल $created, $changed, $deletedया$renamed
nixda

जवाब के लिए धन्यवाद। क्या कोई सुझाव दे सकता है कि हम cmd प्रॉम्प्ट का उपयोग कर सकते हैं क्योंकि मैं परिवर्तित होने पर फ़ाइलों को
जीथब

5

आप सही लाइनों पर लग रहे हैं - आप एक नियमित आधार पर .bat या .cmd फ़ाइल को चलाने के लिए कार्य अनुसूचक का उपयोग कर सकते हैं और वह फ़ाइल आवश्यक फ़ाइल के अस्तित्व की जांच के लिए एक पंक्ति से शुरू हो सकती है - वास्तव में, मैं। फ़ाइल के गैर अस्तित्व के लिए डी जाँच; उदाहरण के लिए:

@ECHO OFF
REM Example file
IF NOT EXIST C:\SOMEWHERE\SUBFOLDER\THISFILE.THS EXIT 1
REM All this gets done if the file exists...
:
:
EXIT 0

आप इस कोड को भी संशोधित कर सकते हैं और इसे लूप में चला सकते हैं, कहते हैं, लूप में 1 मिनट की देरी और फिर विंडोज़ स्टार्टअप फ़ोल्डर में बैच फ़ाइल के लिए एक संदर्भ डाल दिया:

@ECHO OFF
REM Example file
:LOOP    
IF NOT EXIST C:\SOMEWHERE\SUBFOLDER\THISFILE.THS GOTO SKIP01
REM All this gets done if the file exists...
:
:
:SKIP01
REM Crafty 1 minute delay...
PING 1.1.1.1 -n 10 -w 6000 >NUL
GOTO LOOP

विंडोज रनिंग के संस्करण के अनुसार देरी प्राप्त करने के अन्य तरीके हैं और अतिरिक्त संसाधन किट क्या स्थापित किए गए हैं, लेकिन पिंग कमांड सभी परिस्थितियों में बहुत काम करता है। ऊपर पिंग कमांड में, 10 फ़ैंटम पिंग्स को 6000ms (यानी: 6 सेकंड) की देरी के साथ निष्पादित किया जाता है, आप बैच फ़ाइल छोरों के बीच की देरी को प्राप्त करने के लिए इन मूल्यों के साथ खेल सकते हैं।


अच्छा विचार .. btw, C: \> पिंग 1.1.1.1 -n 10 -w 6000 किसी कारण से मेरे कंप्यूटर पर 1 मिनट 10 सेकंड लगे। लेकिन 1 -w 60000 में 1 मिनट का समय लगा।
बारलोप

@barlop - दस दूसरी विसंगति -n 10बनाम के कारण है -n 1

@ रैंडोल्फ पॉटर 6 सेकंड, 60 सेकंड के 10 लॉट नहीं है? और -n 10 जो आप उपयोग करते हैं, का मतलब 10 गुना होना चाहिए।
बार्लोप

शायद तुम सही हो। मैं इसे वापस लेता हूं और अपने गोरे बालों को दोष देता हूं।

मैंने एक निगरानी बैच के लिए इस लूप का उपयोग किया IF NOT EXIST C:\NO_SUCH_FILE_EVER.foo। Hackish, लेकिन यह काम करता है। विचार के लिए धन्यवाद।
स्नेक जूल

3

सुझाव के लिए सभी को धन्यवाद।

मैंने एक VBScript लिखना शुरू कर दिया, जो कि मोटे तौर पर Linker3000 के फ़ोल्डर को मतदान करने के विचार पर आधारित था, और टास्क शेड्यूलर का उपयोग करके इसे स्टार्टअप पर चलाने के लिए। मैंने इस संसाधन से मूल सिंटैक्स प्राप्त करना समाप्त कर दिया है और अपेक्षित जुड़वाँ बना दिया है।

मैं अभी भी इसे किसी बिंदु पर अनुकूलित करना चाहता हूं, स्क्रिप्ट की हिम्मत एक घटना-संचालित प्रणाली पर चलती है, लेकिन मैं इस पर काम करने के लिए समय से बाहर चला गया हूं, और, ठीक है, यह काफी अच्छा है।

यहाँ स्क्रिप्ट है, यदि किसी की दिलचस्पी (अप्रासंगिक रूपांतरण खंड स्पष्टता के लिए फिर से की गई) के साथ:

' FOLDER TO MONITOR
strFolder = "J:\monitored-folder"

' FREQUENCY TO CHECK IT, IN SECONDS
nFrequency = 10

strComputer = "."
strQueryFolder = Replace(strFolder, "\", "\\\\")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" &     strComputer & "\root\cimv2") 
Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceCreationEvent WITHIN " & nFrequency & " WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent='Win32_Directory.Name=""" & strQueryFolder & """'") 

Do 
    Set objLatestEvent = colMonitoredEvents.NextEvent
    strNewFile = objLatestEvent.TargetInstance.PartComponent
    arrNewFile = Split(strNewFile, "=")
    strFilePath = arrNewFile(1)
    strFilePath = Replace(strFilePath, "\\", "\")
    strFilePath = Replace(strFilePath, Chr(34), "")
    strFileName = Replace(strFilePath, strFolder, "")
    strTempFilePath = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) & "\TEMP.M4A"

    ' DO THE OPERATION STUFF
    ' ...
Loop

(इसके अलावा, मैं इस सवाल को आधिकारिक रूप से अनुत्तरित नहीं छोड़ना चाहता - और मुझे इस सवाल का अपना जवाब स्वीकार करने से नफरत है - लेकिन मैंने लिंकर 3000 के उत्तर को धन्यवाद के रूप में स्वीकार किया है!)


2

आप DropIt (मुक्त) को देख सकते हैं। प्रोग्राम कुछ स्वचालित तरीकों से आने वाली फ़ाइलों को संसाधित करने के लिए उपयुक्त है। आप छवियों को विभाजित करने, पीडीएफ को विभाजित करने, आदि के लिए अन्य कमांड लाइन कार्यक्रमों में मापदंडों को स्थानांतरित, कॉपी, हटा सकते हैं और पास कर सकते हैं।


2

यदि कार्रवाई केवल बदली हुई फ़ाइलों को कॉपी करने के लिए है, तो आप रोबोकॉपी / मॉन का उपयोग कर सकते हैं

अगर रोबोकॉपी फ़ाइलस् सिस्टमवॉकर का उपयोग करता है या परिवर्तनों के लिए मतदान करके काम नहीं करता है, तो उसे न जानें


1

या आप वॉच 4 फ़ोल्डर का उपयोग कर सकते हैं । जाहिरा तौर पर यह फ्रीवेयर, पोर्टेबल और विंडोज 7 के साथ संगत है। मैंने इसे आज़माया नहीं है, लेकिन मैंने इसे एक वेब खोज के माध्यम से पाया और सोचा कि मैं इसे चालू कर दूंगा।

मुझे VBS स्क्रिप्ट भी पसंद है, यह भी साइट पर चित्रित किया गया है।


दुर्भाग्य से केवल भुगतान किया गया संस्करण पोर्टेबल है
nixda

इस सॉफ्टवेयर का उपयोग करने के बारे में सोच रहा था। क्या आप कई उपयोगकर्ताओं की महत्वपूर्ण फ़ाइलों के साथ नेटवर्क साझा की निगरानी के लिए इस पर भरोसा करेंगे?
पॉल मैथ्यूज 4

Watch4Folder के मुफ्त संस्करण में केवल एक "नमूना" प्रविष्टि है जिसे कॉन्फ़िगर किया जा सकता है।
पीटरको जूल


0

हम ऐसा करने के लिए http://www.myassays.com/folder-poll से कमर्शियल टूल (यानी फ्री नहीं) फोल्डर पोल का इस्तेमाल करते हैं। यह एक विंडोज एप्लिकेशन है जिसमें आसान कॉन्फ़िगरेशन की अनुमति देने के लिए उपयोगकर्ता के अनुकूल प्रबंधक एप्लिकेशन शामिल है। इसके अलावा, एक XML कॉन्फ़िगरेशन विकल्प है। वास्तविक फ़ोल्डर मतदान एक विंडोज सेवा के रूप में चलता है (इसलिए प्रत्येक पुनरारंभ पर स्वचालित रूप से शुरू होता है)। जब एक नई फ़ाइल को एक सर्वेक्षणित फ़ोल्डर में पता लगाया जाता है, तो एक एप्लिकेशन स्वचालित रूप से लॉन्च किया जा सकता है (आप अपनी खुद की कस्टम कमांड लाइन तर्क निर्दिष्ट कर सकते हैं)। यह अन्य चीजों जैसे कॉपी / मूव फाइल भी कर सकता है। साथ ही, गतिविधि को एक लॉग फ़ाइल में लॉग किया जा सकता है और अन्य उन्नत संचालन हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.