ইউটিএফ -8 বিওএম (বাইট-অর্ডার চিহ্ন) ধারণকারী ডিরেক্টরিতে থাকা সমস্ত ফাইল কীভাবে সন্ধান করবেন?


8

উইন্ডোজে, আমাকে ইউটিএফ -8 বিওএম (বাইট-অর্ডার চিহ্ন) ধারণকারী একটি ডিরেক্টরিতে সমস্ত ফাইল সন্ধান করতে হবে । কোন সরঞ্জামটি এটি করতে পারে এবং কীভাবে?

এটি পাওয়ারশেল স্ক্রিপ্ট, কিছু পাঠ্য সম্পাদকের উন্নত অনুসন্ধান বৈশিষ্ট্য বা যা কিছু হতে পারে।

উত্তর:


15

এখানে পাওয়ারশেল স্ক্রিপ্টের উদাহরণ রয়েছে। এটি যে C:কোনও ফাইলের জন্য প্রথম 3 বাইট যেখানে রয়েছে তার পথ দেখায় 0xEF, 0xBB, 0xBF

Function ContainsBOM
{   
    return $input | where {
        $contents = [System.IO.File]::ReadAllBytes($_.FullName)
        $_.Length -gt 2 -and $contents[0] -eq 0xEF -and $contents[1] -eq 0xBB -and $contents[2] -eq 0xBF }
}

get-childitem "C:\*.*" | where {!$_.PsIsContainer } | ContainsBOM

"রিডআলবাইটস" কি প্রয়োজনীয়? হয়তো প্রথম কয়েকটি বাইট পড়ে আরও ভাল পারফর্ম করতে পারে?

ন্যায্য বিন্দু. এখানে একটি আপডেট করা সংস্করণ যা কেবল প্রথম 3 বাইট পড়ে।

Function ContainsBOM
{   
    return $input | where {
        $contents = new-object byte[] 3
        $stream = [System.IO.File]::OpenRead($_.FullName)
        $stream.Read($contents, 0, 3) | Out-Null
        $stream.Close()
        $contents[0] -eq 0xEF -and $contents[1] -eq 0xBB -and $contents[2] -eq 0xBF }
}

get-childitem "C:\*.*" | where {!$_.PsIsContainer -and $_.Length -gt 2 } | ContainsBOM

1
কুল। আমি উত্তর হিসাবে চিহ্নিত করার আগে, "ReadAllBytes" প্রয়োজন? হয়তো প্রথম কয়েকটি বাইট পড়ে আরও ভাল পারফর্ম করতে পারে?
বোরেক বার্নার্ড

@ বোরেক সম্পাদনা দেখুন।
vcsjones

2
এই আমার দিন বাঁচা! এছাড়াও শিখেছি get-childitem -recurseপাশাপাশি সাব-ডাইরেক্টরিগুলিও পরিচালনা করতে।
দীনেভালা

আমি ভাবলাম উপরের স্ক্রিপ্টটি ব্যবহার করে বিওএমগুলি সরানোর কোনও উপায় আছে কি?
tom_mai78101

2

পার্শ্ব নোট হিসাবে, এখানে আমার পাওয়ার ফাইলগুলি থেকে ইউটিএফ -8 বিওএম চার্টার (গুলি) কে ছিনিয়ে নেওয়ার জন্য একটি পাওয়ারশেল স্ক্রিপ্ট রয়েছে:

$files=get-childitem -Path . -Include @("*.h","*.cpp") -Recurse
foreach ($f in $files)
{
(Get-Content $f.PSPath) | 
Foreach-Object {$_ -replace "\xEF\xBB\xBF", ""} | 
Set-Content $f.PSPath
}

আমি কেবল বেশ কয়েকটি ফাইল পেয়েছি যা কেবলমাত্র কিছু লোকের বিওএম ছিল এবং কিছু না থাকায় এটির পার্থক্য ছিল। আপনার উত্তরটি আমার সমস্ত কিছুর পরিষ্কার করার দরকার ছিল। ধন্যবাদ!
তেভ্য

1

আপনি যদি কোনও এন্টারপ্রাইজ কম্পিউটারে থাকেন (আমার মতো) সীমাবদ্ধ সুযোগসুবিধা সহ এবং পাওয়ারশেল স্ক্রিপ্টটি পরিচালনা করতে না পারেন , তবে নীচের স্ক্রিপ্টটি সহ পাইথনস্ক্রিপ্ট প্লাগইন সহ একটি পোর্টেবল নোটপ্যাড ++ ব্যবহার করতে পারেন :

import os;
import sys;
filePathSrc="C:\\Temp\\UTF8"
for root, dirs, files in os.walk(filePathSrc):
    for fn in files:
      if fn[-4:] != '.jar' and fn[-5:] != '.ear' and fn[-4:] != '.gif' and fn[-4:] != '.jpg' and fn[-5:] != '.jpeg' and fn[-4:] != '.xls' and fn[-4:] != '.GIF' and fn[-4:] != '.JPG' and fn[-5:] != '.JPEG' and fn[-4:] != '.XLS' and fn[-4:] != '.PNG' and fn[-4:] != '.png' and fn[-4:] != '.cab' and fn[-4:] != '.CAB' and fn[-4:] != '.ico':
        notepad.open(root + "\\" + fn)
        console.write(root + "\\" + fn + "\r\n")
        notepad.runMenuCommand("Encoding", "Convert to UTF-8 without BOM")
        notepad.save()
        notepad.close()

ক্রেডিট https://pw999.wordpress.com/2013/08/19/mass-convert-a-project-to-utf-8- using-notepad/ এ যায়

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