কীভাবে প্রদত্ত ফোল্ডারের অধীনে সমস্ত ফাইল হ্যান্ডলগুলি প্রোগ্রামাগ্রমে বন্ধ করা যায়?


18

আমি ভাবছিলাম যে কোনও কমান্ড-লাইন সরঞ্জাম আছে যা আমাকে নির্দিষ্ট ফোল্ডারের নীচে খোলা সমস্ত ফাইল হ্যান্ডলগুলি বন্ধ করতে দেয়।

আমি প্রসেসএক্সপ্লোরার , আনলককারী এবং অনুরূপ সরঞ্জাম ব্যবহার করে দেখেছি , তবে তারা একটি জিইউআই ইন্টারফেস দেয়, এবং প্রোগ্রামিং পরিবেশে কার্যকর হয় না

পাইথন, সেন্টিমিটার বা পাওয়ারশেলের একটি সমাধান আদর্শ হবে।


মনে রাখবেন জোর করে কোনও ফাইল হ্যান্ডেল বন্ধ করার ফলে সেই হ্যান্ডেলটি ব্যবহার করে প্রোগ্রামটি ক্র্যাশ হতে পারে।
হ্যারি জনস্টন

1
@ হ্যারি জোনস্টন এর চেয়ে খারাপ, প্রোগ্রামটি যতক্ষণ না খোলা থাকে ততক্ষণ আপনি সমস্ত ধরণের ফাইলের দুর্নীতির কারণ হয়ে উঠতে পারেন
বব

উত্তর:


7

আনলককারী দাবি করে যে এটি আপনাকে এই ক্ষমতা দেয়:

  1. কেবল ফোল্ডার বা ফাইলটিতে ডান ক্লিক করুন এবং আনলকার নির্বাচন করুন

    ধাপ 1

  2. যদি ফোল্ডার বা ফাইলটি লক করা থাকে তবে লকারগুলির একটি উইন্ডো তালিকা উপস্থিত হবে

    ধাপ ২

  3. কেবল ক্লিক করুন Unlock Allএবং আপনার কাজ শেষ!

আমি নিশ্চিত না এটি কমান্ড-লাইন ব্যবহার সমর্থন করে কিনা।

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

ফাইলআস্যাসিনের সুইচগুলি


ধন্যবাদ techie007, আমি মনে করি আমি এটি মিস করেছি। আমি লক্ষ্য করেছি যে আনলককারী মাঝে মাঝে আমার ফাইলগুলি মিস করে (প্রসেস এক্সপ্লোরার তা করেন না) .. দ্বিতীয় সমস্যাটি যদি আমি যদি আনলক করতে বা প্রোগ্রামগুলিতে ফাইলগুলি মুক্তি দিতে চাই (যেমন একটি কমান্ড লাইন সরঞ্জাম এই দিকটি সাহায্য করবে)।
আমেলিও ওয়াজকেজ-রেইনা

@intrpc আপনি সেখানে যান, আমি আরেকটি (কমান্ড-লাইন-বান্ধব) পরামর্শ যুক্ত করেছি। :)
4cʜιᴇ007

1
সাবধান, আনলককারী আজকাল ম্যালওয়ারের সাথে বান্ডিল হয়ে আসে।
জোশুয়া হ্যানলি

10

এর জন্য ধন্যবাদ. আমাদের উইন্ডোজ-ভিত্তিক জেনকিন্স কাজের মধ্যে গিট চেকআউটগুলি ব্যর্থ হওয়ার কারণে খোলা ফাইল হ্যান্ডলগুলি নিয়ে আমরা কিছু সমস্যা করছি এবং এটি সমস্যাটি সহজেই সমাধান করতে সহায়তা করেছে। আমি কৌশলটির বেসিকগুলি ফেলে দেব:

  1. বিল্ড নোডে Handle.exe ইনস্টল করুন। আমি এটি এখান থেকে http://technet.microsoft.com/en-us/sysinternals/bb896655 এ ডাউনলোড করেছি , এটি আনজিপ করে এবং সি: \ উইন্ডোজ \ সিস্টেম 32 এর অধীনে হ্যান্ডেল.এক্সিকে বাদ দিয়েছি এটি ডিফল্ট% PATH% এ উপলব্ধ হবে কিনা তা নিশ্চিত করার জন্য

  2. জেনকিন্স প্রাক-স্কেম-বিল্ডস্টেপ প্লাগইন ইনস্টল করুন: https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep । গিট প্লাগইন সম্ভাব্য লক করা ফাইলগুলির কাছে পৌঁছানো শুরু করার আগে এটি আমাদের ক্রিয়াকলাপ সংজ্ঞায়িত করতে দেয়।

  3. প্রাক-স্কেম বিল্ড স্টেপ হিসাবে নিম্নলিখিত ব্যাচ কমান্ডটি প্রয়োগ করেছে:

    @echo off
    echo Cleaning up open file handles from %NODE_NAME%:%WORKSPACE%...
    for /f "tokens=3,6,8 delims=: " %%i in ('Handle /accepteula %WORKSPACE% ^| grep workspace') do echo Releasing file lock on E:%%k & handle -c %%j -y -p %%i
    

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

  • Handler.exe এর একটি EULA রয়েছে যা এটি প্রথমবারের সাথে চালিত হওয়ার আগে গ্রহণ করতে হবে। আপনি যদি নিজের জেনকিনস এজেন্টকে স্থানীয় সিস্টেমের প্রেক্ষাপটে পরিষেবা হিসাবে চালাচ্ছেন তবে এটি সমস্যাযুক্ত কারণ আপনি সেই ব্যবহারকারী হিসাবে লগ ইন করতে পারবেন না এবং এটি হাতে হাতে গ্রহণ করতে পারবেন না। আমরা যখন এটি জেনকিন্স কাজ থেকে চালানোর চেষ্টা করেছি, প্রক্রিয়াটি কেবলমাত্র ব্যবহারকারী ইনপুটটির জন্য অপেক্ষা করছিল এবং এর কারণটি বের করতে কয়েক মিনিট সময় লাগল। আমি এটিকে জেনকিন্স কাজ থেকে / গ্রহণযোগ্য ফুল ব্যবহার করে চালিয়ে সমাধান করেছি এবং আমি স্বতঃপ্রযুক্তি প্রক্রিয়া হিসাবে যে কেউ এটি বাস্তবায়ন করার পরামর্শ দিচ্ছি। এটি HKEY_CURRENT_USER \ সফ্টওয়্যার ys সিস্টেটার্নালস \ হ্যান্ডেলের অধীনে একটি রেজিস্ট্রি সেটিং হিসাবে দেখা যায় এবং আপনি যদি নির্দিষ্ট ব্যবহারকারীর জন্য এটি পরিচালনা করতে চান তবে আপনি এটি regedit.exe এর মাধ্যমে সেট এবং আনসেট করতে পারেন, তবে কমান্ড লাইন বিকল্পটি সবচেয়ে সহজ বলে মনে হচ্ছে।

  • জেনকিনস ব্যাচের ধাপ প্লাগইনটি ব্যাচ কোডটি এমনভাবে কার্যকর করে যেন এটি কোনও কমান্ড লাইন নির্দেশিকার চেয়ে স্ক্রিপ্টে থাকে। পালানোর বিষয়টি লক্ষ্য করুন (যেমন %% i, ^ |)।

ধন্যবাদ!


এর সিনট্যাক্স পেতে লড়াই করা, কেউ%% i, j ইত্যাদি কি আরও বিশদ দিতে পারে?
c4sh

এটি ব্যাচের কমান্ডের বাক্য গঠনটি
c4sh

আপনি ছেলেরা কীভাবে এই সমস্যাটির সমাধান করলেন যে হ্যান্ডেল.এক্সই প্রশাসক হিসাবে চালানো দরকার, যখন আমরা এটিকে প্রশাসক নন এমন একটি জেনকিন্স ব্যবহারকারীর কাছ থেকে চালানো হয়?
c4sh

8

আমরা আমাদের সার্ভারে ব্যবহারকারীদের থেকে ফাইল হ্যান্ডেল বন্ধ করতে নিম্নলিখিত স্নিপেট ব্যবহার করি। আপনি আপনার ব্যবহারের জন্য এটি সংশোধন করতে সক্ষম হতে পারেন।

rem close all network files that are locked
for /f "skip=4 tokens=1" %%a in ('net files') do net files %%a /close

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

5

আমি এই ছোট ব্যাচ ফাইলটি তৈরি করেছি আমার গ্রহণের দ্বারা সমস্ত লকগুলিকে এক্সএমএল ফাইলে ছেড়ে দিতে

@echo off
for /f "tokens=3,6,8 delims=: " %%i in ('handle -p eclipse e:\git\ ^| grep .xml') do echo Releasing %%k & handle -c %%j -y -p %%i

আপনি ডাউনলোড করতে হবে হাতল থেকে উপযোগ Microsoft সাইট এবং , grep থেকে উপযোগ GnuWin32

যদি আপনার ফাইল প্রকার অনুসারে ফিল্টারের প্রয়োজন না হয় তবে আপনি এইভাবে গ্রেপ অংশটি এড়িয়ে যেতে পারেন:

@echo off
for /f "tokens=3,6,8 delims=: " %%i in ('handle -p eclipse e:\git\') do echo Releasing %%k & handle -c %%j -y -p %%i

বা যদি আপনাকে কোনও নির্দিষ্ট প্রোগ্রামের দ্বারা লকগুলি ফিল্টার করার প্রয়োজন না হয় তবে কেবল গ্রহন প্রক্রিয়া ফিল্টারটি সরিয়ে ফেলুন:

@echo off
for /f "tokens=3,6,8 delims=: " %%i in ('handle e:\git\') do echo Releasing %%k & handle -c %%j -y -p %%i

e:\git\আপনার ফোল্ডারের পথটি প্রতিস্থাপন করতে ভুলবেন না ।


4

আপনি যদি PSTools ব্যবহার করে থাকেন তবে এটি সমস্ত খোলা ফাইলগুলি পুনরাবৃত্তভাবে বন্ধ করতে বাধ্য করবে:

psfile \\serverName c:\path\toDatabase\ -c

নোটটি c:\path\toDatabase\হ'ল সি: ড্রাইভ চালু করুন \\serverName, আপনার স্থানীয় মেশিনটি নয়। এটি প্রথমে আমার কাছে অস্পষ্ট ছিল তাই আমি ভেবেছিলাম এটি উল্লেখ করব।

এটি একটি নিষ্ঠুর বলের পদ্ধতির যা ডেটা হারাতে প্রায় গ্যারান্টিযুক্ত, তাই এটি সতর্কতার সাথে ব্যবহার করুন।

আমাদের অ্যাক্সেস ডাটাবেসটি খুব খারাপভাবে একসাথে আবদ্ধ হয়েছে যা নিয়মিতভাবে আমাদের সংস্থাটিকে হাঁটুর কাছে নিয়ে আসে (গতকালই আমাকে তিনবার এটি ঠিক করতে হয়েছিল)।

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

কৌতুক ভাবা লোকদের থেকে এগিয়ে রয়েছে যারা ডেটাবেসটি নেমে যাওয়ার সাথে সাথেই পুনরায় সংযোগ শুরু করে। তারা এতটা অভ্যস্ত হয়ে গেছে যে এটির বিরুদ্ধে কোনও বাগ ফাইল করার জন্য এটি ঘটে না, তারা ফিরে না আসা পর্যন্ত কেবল ডাটাবেস হাতুড়ি করে রাখে I've তিন ডজনকে সংযোগ না করে এবং মেরামত না করা পর্যন্ত আমি কেবল সেগুলি চালিয়ে ফেলি keep ডাটাবেস আপ যে ফাইল।


4

যদি আপনি কোনও উইন্ডোজ ফাইল সার্ভারে (সার্ভার ২০১২ বা আরও নতুন) এসএমবি শেয়ারের মাধ্যমে ফাইলগুলির হ্যান্ডলগুলি সম্পর্কে খোলা কথা বলছেন, তবে পাওয়ারশেলের উত্তরটি এখানে:

Get-SmbOpenFile | Where-Object { $_.Path -like "D:\Folder\*" } | Close-SmbOpenFile -Force

পুরানো উইন্ডোজ ফাইল সার্ভারে, এটি openfiles.exe /disconnect

স্থানীয় সিস্টেমের ফাইল হ্যান্ডেলের জন্য, সিসিন্টার্নাল হ্যান্ডেল.এক্স.ই.কে ব্যবহার করা সবচেয়ে ভাল উপায়


3

আমি http://lockhunter.com পছন্দ করি কারণ এটি জিইআইআই এবং কমান্ড লাইন ইন্টারফেস উভয়কেই সমর্থন করে এবং অনেক ক্ষেত্রে আনলকারের দ্বারা মোছা যায় না এমন ফাইলগুলি মুছতে সক্ষম হয়েছিল।


2

আনলককারী পাশাপাশি নীরব মোডে চলতে পারে।

উদাহরণস্বরূপ, জেনকিন্স ওয়ার্কস্পেসের ভিতরে সমস্ত ফাইল আনলক করতে:

"C:\Program Files\Unlocker\unlocker.exe" "%WORKSPACE%" /S

তারপরে আপনি নিরাপদে ওয়ার্কস্পেস ফাইলগুলি মুছতে পারেন:

del "%WORKSPACE%\*.*" /s /q

0

আপনি এই জিনিসগুলি করতে পাওয়ারশেল ব্যবহার করতে পারেন :

function KillProcessesWithHandles
{
    param([string]$path)

    $allProcesses = Get-Process

    # Start by closing all notepad processes. Someone may have left a logor config file open
    $allProcesses | Where-Object {$_.Name -eq "notepad"} | Stop-Process -Force -ErrorAction SilentlyContinue

    # Then close all processes running inside the folder we are trying to delete
    $allProcesses | Where-Object {$_.Path -like ($path + "*")} | Stop-Process -Force -ErrorAction SilentlyContinue

    # Finally close all processes with modules loaded from folder we are trying to delete
    foreach($lockedFile in Get-ChildItem -Path $path -Include * -Recurse) {
        foreach ($process in $allProcesses) {
            $process.Modules | Where-Object {$_.FileName -eq $lockedFile} | Stop-Process -Force -ErrorAction SilentlyContinue
        }
    }
}

আরও তথ্যের জন্য, এখানে থমাস আর্ডাল দেখুন: https://thomasardal.com/deleting-contents-of-a-folder-containing-files-with-open-file-handles-used-powershell/

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