विंडोज पर, मुझे सभी फाइलों को एक निर्देशिका में ढूंढना होगा जिसमें UTF-8 BOM (बाइट-ऑर्डर मार्क) हो। कौन सा उपकरण ऐसा कर सकता है और कैसे?
यह एक PowerShell स्क्रिप्ट, कुछ पाठ संपादक की उन्नत खोज सुविधा या जो कुछ भी हो सकता है।
विंडोज पर, मुझे सभी फाइलों को एक निर्देशिका में ढूंढना होगा जिसमें UTF-8 BOM (बाइट-ऑर्डर मार्क) हो। कौन सा उपकरण ऐसा कर सकता है और कैसे?
यह एक PowerShell स्क्रिप्ट, कुछ पाठ संपादक की उन्नत खोज सुविधा या जो कुछ भी हो सकता है।
जवाबों:
यहाँ एक PowerShell स्क्रिप्ट का एक उदाहरण है। यह 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
क्या "ReadAllBytes" आवश्यक है? शायद कुछ पहले बाइट्स पढ़ने से बेहतर प्रदर्शन होगा?
निष्पक्ष बिंदु। यहां एक अद्यतन संस्करण है जो केवल पहले 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
get-childitem -recurse
उपनिर्देशिकाओं को भी संभालना है।
एक साइड नोट के रूप में, यहां एक PowerShell स्क्रिप्ट है जिसका उपयोग मैं अपने स्रोत फ़ाइलों से UTF-8 BOM charater (s) को हटाने के लिए करता हूं:
$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
}
यदि आप एक एंटरप्राइज़ कंप्यूटर (मेरे जैसे) प्रतिबंधित विशेषाधिकारों के साथ हैं और पॉवरशेल स्क्रिप्ट नहीं चला सकते हैं, तो आप निम्न स्क्रिप्ट के साथ, कार्य करने के लिए पायथोनस्क्रिप्ट प्लगइन के साथ एक पोर्टेबल नोटपैड ++ का उपयोग कर सकते हैं :
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-use-notepad/ को जाता है