কোনও ফাইল তৈরি বা সম্পাদিত হয়ে কীভাবে কোনও ফোল্ডার নিরীক্ষণ এবং কমান্ড-লাইন ক্রিয়াকে ট্রিগার করবেন?


82

আমার ভিস্তা মেশিনে আমাকে কিছু ধরণের স্ক্রিপ্ট সেটআপ করা দরকার, যাতে যখনই কোনও ফাইল একটি নির্দিষ্ট ফোল্ডারে যুক্ত হয়, এটি স্বয়ংক্রিয়ভাবে একটি ব্যাকগ্রাউন্ড প্রক্রিয়া চালিত করে যা ফাইলটিতে কাজ করে। (ব্যাকগ্রাউন্ড প্রক্রিয়াটি কেবলমাত্র একটি কমান্ড-লাইন ইউটিলিটি যা ফাইলের নামটিকে আর্গুমেন্ট হিসাবে এবং অন্যান্য কিছু পূর্বনির্ধারিত বিকল্পগুলির সাথে নেয়।)

আমি পারফরম্যান্স এবং রক্ষণাবেক্ষণের কারণে, যদি সম্ভব হয় তবে উইন্ডোজ বৈশিষ্ট্যগুলি ব্যবহার করে এটি করতে চাই। আমি টাস্ক শিডিয়ুলারটি ব্যবহার করে দেখেছি, তবে কিছুক্ষণের জন্য ট্রিগার সিস্টেমটি বোঝার পরেও আমি এর বেশি ধারণা দিতে পারিনি, এবং এটি আমার কী প্রয়োজন তা করতে সক্ষম কিনা তাও আমি নিশ্চিত নই।

আমি কোন পরামর্শ প্রশংসা করব। ধন্যবাদ!


আপনার মতো শোনার জন্য লিনাক্সের ইনোটিফাইয়ের মতো কিছু দরকার তবে উইন্ডোগুলির জন্য। জোনটিফাই সাহায্য করতে পারে তবে এটি জাভা খুব বেশি ভারী ওজন হতে পারে।
কিথ

1
আমি এটি সম্পর্কেও ভাবছিলাম ... খুঁজে পেয়েছি [এমএসডিএন পৃষ্ঠা] (এমএসডিএন.মাইক্রোসফটকম /en-us/library/aa365261(VS.85).aspx)
কিথ

2
লিঙ্কটি থাকে উপরে) aspx পরে: msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
সূর্যের

উত্তর:


92

কর্মক্ষেত্রে আমরা ফোল্ডারগুলি নিরীক্ষণের জন্য পাওয়ারশেল ব্যবহার করি।
এটি কোনও অতিরিক্ত সরঞ্জাম ছাড়াই উইন্ডোজ ভিস্তা (.NET এবং পাওয়ারশেল পূর্বেই ইনস্টল করা আছে) ব্যবহার করা যেতে পারে।

এই স্ক্রিপ্টটি একটি নির্দিষ্ট ফোল্ডার পর্যবেক্ষণ করে এবং একটি লগফিল লেখায়। আপনি অ্যাকশনটি প্রতিস্থাপন করতে পারেন এবং যা কিছু করতে চান যেমন একটি বাহ্যিক সরঞ্জাম কল করুন

উদাহরণ লগ ফাইল

11/23/2014 19:22:04, তৈরি, ডি: \ উত্স \ নতুন পাঠ্য দস্তাবেজ। টেক্সট
11/23/2014 19:22:09, পরিবর্তিত, ডি: \ উত্স \ নতুন পাঠ্য দস্তাবেজ। টেক্সট
11/23/2014 19:22:09, পরিবর্তিত, ডি: \ উত্স \ নতুন পাঠ্য দস্তাবেজ। টেক্সট
11/23/2014 19:22:14, মোছা, ডি: \ উত্স \ নতুন পাঠ্য দস্তাবেজ .xt

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. রাইট ক্লিক দ্বারা নিরীক্ষণ শুরু করুন Power পাওয়ারশেলের সাথে সম্পাদন করুন

পর্যবেক্ষণ বন্ধ করতে, আপনার পাওয়ারশেল উইন্ডোটি বন্ধ করার পক্ষে এটি যথেষ্ট

আরও পড়া


দুর্দান্ত কাজ করে তবে স্টপ স্ক্রিপ্টটির কাজ কী? আমি ত্রুটিগুলি পেয়েছি: "নিবন্ধভুক্ত-ইভেন্ট: 'সোর্সআইডেন্টিফায়ার' প্যারামিটারে যুক্তি বাঁধতে পারে না কারণ এটি বাতিল n" পেস্টবিন.
com/ugLB3a69

@ জনস্ট্যানস্ট্রুপ আমি সম্ভবত আরও বেশি লোককে দ্বিতীয় স্ক্রিপ্টে বিভ্রান্ত করেছি আমি এটি মুছে ফেলব। StartWatching.ps1নিরীক্ষণ বন্ধ করতে কেবল আপনার উইন্ডোটি বন্ধ করা যথেষ্ট । দ্বিতীয় স্ক্রিপ্ট শুধুমাত্র ভেরিয়েবল সেভ করতে কাজ করে যদি আপনি এটি আপনার প্রথম স্ক্রিপ্ট অন্তর্ভুক্ত $created, $changed, $deletedবা$renamed
nixda

উত্তরের জন্য ধন্যবাদ. কেউ পরিবর্তন করতে গেলে আমি
গিথুবগুলিতে

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 টি ফ্যান্টম পিংস তাদের মধ্যে 6000 মিমি (অর্থাৎ: 6 সেকেন্ড) বিলম্বের সাথে কার্যকর করা হয়, আপনি ব্যাচ ফাইল লুপগুলির মধ্যে যে বিলম্বের প্রয়োজন তা অর্জন করতে আপনি এই মানগুলি নিয়ে খেলতে পারেন।


সুন্দর ধারণা .. বিটিডব্লিউ, সি: \> পিং 1.1.1.1 -n 10-ডব্লু 6000 কোনও কারণে আমার কম্পিউটারে 1 মিনিট 10 সেকেন্ড সময় নিয়েছে। তবে -n 1 -w 60000 ঠিক 1 মিনিট সময় নিয়েছিল।
বার্লপ

@barlop - দশ দ্বিতীয় অমিল কারণে -n 10বনাম -n 1

@ র্যান্ডলফ পটার 10 লট 6 সেকেন্ড, 60 সেকেন্ড নয়? এবং -n 10 যা আপনি ব্যবহার করেন তার অর্থ 10 বার হওয়া উচিত।
বার্লপ

তুমি সম্ভবত সঠিক. আমি এটি ফিরিয়ে নিয়েছি এবং আমার স্বর্ণকেশী চুলকে দোষ দিই।

আমি এই লুপটি একটি পর্যবেক্ষণ ব্যাচের জন্য ব্যবহার করে শেষ করেছি IF NOT EXIST C:\NO_SUCH_FILE_EVER.foo। হ্যাকিশ, তবে এটি কাজ করে। ধারণার জন্য ধন্যবাদ।
স্নেকস

3

সমস্ত ধন্যবাদ, পরামর্শের জন্য।

আমি একটি ভিবিএস স্ক্রিপ্ট লিখে শেষ করেছিলাম যা ফোল্ডারটি পোলিংয়ের প্রায়শই লিঙ্কার 3000 এর ধারণার উপর ভিত্তি করে তৈরি হয়েছিল এবং টাস্ক শিডিয়ুলারটি ব্যবহার করে এটি শুরুতে চালানো হয়েছিল। আমি এই সংস্থান থেকে বেসিক সিনট্যাক্স পেয়ে শেষ করেছি এবং প্রয়োজনীয় টুইটগুলি করেছি।

আমি স্ক্রিপ্টের সাহসী কোনও ইভেন্ট-চালিত সিস্টেমে চালিত হওয়ার পরেও আমি এটিকে অপ্টিমাইজ করতে চাই, তবে আমি এটি নিয়ে কাজ করার জন্য খুব বেশি সময় পার করেছি, এবং ভাল, এটি যথেষ্ট ভাল।

স্ক্রিপ্টটি এখানে, কারও আগ্রহের ক্ষেত্রে (অপ্রাসঙ্গিক রূপান্তর বিভাগটি স্পষ্টতার জন্য পুনঃনির্দেশিত সহ):

' 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

(এছাড়াও, আমি এই প্রশ্নটি আনুষ্ঠানিকভাবে উত্তর ছাড়তে চাই না - এবং আমি এই প্রশ্নের নিজের উত্তরটি গ্রহণ করতে ঘৃণা করি - তবে আমি ধন্যবাদ হিসাবে লিঙ্কার ৩০০০ এর উত্তরকে অগ্রাহ্য করেছি!)


2

আপনি DropIt (বিনামূল্যে) তাকান হতে পারে । প্রোগ্রামটি কিছু স্বয়ংক্রিয় উপায়ে আগত ফাইলগুলি প্রক্রিয়াকরণের জন্য উপযুক্ত। আপনি চিত্র, বিভক্ত পিডিএফ ইত্যাদিতে রূপান্তর করতে অন্য কমান্ড লাইন প্রোগ্রামগুলিতে প্যারামিটারগুলি স্থানান্তর, অনুলিপি, মুছতে এবং পাস করতে পারেন can


2

যদি ক্রিয়াটি কেবল পরিবর্তিত ফাইলগুলি অনুলিপি করতে হয় তবে আপনি রোবোকপি / মন ব্যবহার করতে পারেন

জানেন না যে রোবোকপি ফাইলসিসটামওয়াচার ব্যবহার করে বা পরিবর্তনের জন্য ভোটদানের মাধ্যমে কাজ করে কিনা


1

অথবা আপনি ওয়াচ 4 ফোল্ডার ব্যবহার করতে পারেন । স্পষ্টতই এটি ফ্রিওয়্যার, পোর্টেবল এবং উইন্ডোজ with এর সাথে সামঞ্জস্যপূর্ণ I

আমি ভিবিএস স্ক্রিপ্টটিও খুব পছন্দ করি, সাইটেও বৈশিষ্ট্যযুক্ত।


দুর্ভাগ্যক্রমে কেবল অর্থ প্রদানের সংস্করণটি পোর্টেবল
নিক্সদা

এই সফ্টওয়্যারটি ব্যবহার করার বিষয়ে ভাবছিলাম। আপনি কি অনেক ব্যবহারকারীদের গুরুত্বপূর্ণ ফাইলগুলির সাথে একটি নেটওয়ার্ক শেয়ার নিরীক্ষণ করার জন্য এটি বিশ্বাস করবেন?
পল ম্যাথিউজ

ওয়াচ 4 ফোল্ডারের বিনামূল্যে সংস্করণটিতে একটি মাত্র "নমুনা" এন্ট্রি রয়েছে যা কনফিগার করা যায়।
পিটারকো


0

আমরা এটি করতে বাণিজ্যিক সরঞ্জাম (অর্থাত্ মুক্ত নয়) ফোল্ডার পোল http://www.myassays.com/folder-poll থেকে ব্যবহার করি। এটি একটি উইন্ডোজ অ্যাপ্লিকেশন যা সহজেই কনফিগারেশনের অনুমতি দেওয়ার জন্য ব্যবহারকারী-বান্ধব ম্যানেজার অ্যাপ্লিকেশনটিকে অন্তর্ভুক্ত করে। এছাড়াও, একটি এক্সএমএল কনফিগারেশন বিকল্প রয়েছে। আসল ফোল্ডার পোলিং একটি উইন্ডোজ পরিষেবা হিসাবে চালিত হয় (সুতরাং প্রতিটি পুনরায় আরম্ভের পরে স্বয়ংক্রিয়ভাবে শুরু হয়)। পোল ফোল্ডারে কোনও নতুন ফাইল সনাক্ত করা গেলে একটি অ্যাপ্লিকেশন স্বয়ংক্রিয়ভাবে চালু করা যায় (আপনি নিজের কাস্টম কমান্ড লাইন আর্গুমেন্ট নির্দিষ্ট করতে পারেন)। এটি অনুলিপি / মুভ ফাইলগুলির মতো অন্যান্য জিনিসও করতে পারে। এছাড়াও, ক্রিয়াকলাপ একটি লগ ফাইলে লগ করা যায় এবং অন্যান্য উন্নত ক্রিয়াকলাপ রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.