أمر FIND
للبحث عن نص في ملفات متعددة من موجه الأوامر Windows أو ملفات البرنامج التعليمي، يمكنك استخدام أمر FIND، الذي كان موجودًا منذ أيام MS DOS ولا يزال متاحًا في Windows 11. إنه مشابه لأمر grep
في Unix، لكنه لا يدعم تعبيرات عادية. إذا أردت البحث عن كلمة borogoves
في الدليل الحالي، يرجى اتباع هذا البناء الصيغة:
find "borogoves" *
لاحظ أن الاقتباس المزدوج حول النمط إلزامي. إذا كنت تستخدم PowerShell، ستحتاج إلى تضمين الاقتباس المفرد أيضًا:
find '"borogoves"' *
بدلاً من النجمة (*
)، يمكنك تحديد ماسك الملف مثل *.htm?
. يعرض أمر find
أسماء الملفات التي يقوم بفحصها، حتى لو لم يجد أي مباريات داخل هذه الملفات:
البحث هو حساس لحالة الأحرف بشكل افتراضي، لذا تحتاج عادةً إلى إضافة مفتاح /I
لمعاملة الأحرف الكبيرة والصغيرة بالتساوي:
find /I "<a href=" *.htm
إذا لم تحدد الملف الذي تبحث فيه، ستنتظر أمر find
مدخل النص من stdin، بحيث يمكنك توجيه الإخراج من أمر آخر. على سبيل المثال، يمكنك سرد جميع أوامر النسخ المدعومة في Windows:
help | find /i "copy"
مفتاح آخر، /V
، يسمح لك بالعثور على جميع الأسطر التي لا تحتوي على النمط، مشابه لأمر grep -v
.
في ملفات البرنامج التعليمي، يمكنك استخدام حقيقة أن أمر find
يحدد رمز الخروج (errorlevel) إلى 1 إذا لم يتم العثور على النمط. على سبيل المثال، يمكنك التحقق مما إذا كانت الآلة تعمل على نسخة 64 بت أو 32 بت من Windows:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
أمر FINDSTR: بحث التعبيرات العادية
إذا كنت بحاجة إلى البحث عن تعبير عادي، جرب الأمر FINDSTR
الذي تم طرحه في Windows XP. بسبب الأسباب التاريخية، findstr
يدعم مجموعة محدودة من التعبيرات العادية، لذا يمكنك فقط استخدام هذه ميزات التعبيرات العادية:
- النقطة
.
تطابق أي حرف باستثناء سطر الأختبار والأحرف الASCII الموسعة. - قوائم الأحرف
[abc]
تطابق أي من الأحرف المحددة (a
،b
، أوc
). - نطاقات قوائم الأحرف
[a-z]
تطابق أي حرف منa
إلىz
. - علامة النجمة (
*
) تشير إلى أن الحرف السابق يمكن تكراره صفر أو أكثر من المرات. - الرموز
\<
و\>
تحدد بداية ونهاية كلمة. - علامة الإقحام (
^
) وعلامة الدولار ($
) تشير إلى بداية ونهاية سطر. - الشريط المائل (
\
) يهجم أي حرف مميز، مما يسمح لك بالبحث عن الأحرف المطلقة. على سبيل المثال،\$
يجد علامة الدولار نفسها.
Findstr لا يدعم فئات الأحرف (\d
)، الاختلاف (|
)، أو تكرارات أخرى (+
أو {5}
).
تتشابه البنية الأساسية بناء جملة الأمر مع أمر FIND
:
findstr "\<20[0-9][0-9]\>" *.htm
يجد هذا الأمر جميع السنوات التي تبدأ بـ 2000 في ملفات .htm
في الدليل الحالي. تمامًا مثلما هو الحال مع find
، استخدم مفتاح /I
للبحث غير المبالغ فيه:
قيود وتساهلات FINDSTR
قوائم الأحرف [a-z]
دائمًا تكون غير مبالغ فيه، لذا echo ABC | findstr "[a-z]"
يطابق.
الحرف الفارغ يعمل كرمز التعبير المشترك في findstr
، لذا سيجد عرض بحث مثل findstr "new shoes" *
جميع الأسطر التي تحتوي إما على new
أو shoes
. للأسف، لا توجد طريقة لهروب الفراغ واستخدامه كحرف حرفي في تعبير منتظم. على سبيل المثال، لا يمكنك العثور على سطور تبدأ بفراغ.
الأخطاء النحوية في تعبير منتظم تُترك دون معالجة. على سبيل المثال، findstr "[" *
سيطابق جميع الأسطر التي تحتوي على الحرف [
.
إذا كان الملف يحتوي على التوقفات الصفحة في نظام Unix (LF)، فإن الرمز المتعرف $
لا يعمل بشكل صحيح. إذا كان السطر الأخير من ملف يفتقر إلى حرف توقف سطر، فإن findstr
لن يتمكن من العثور عليه. على سبيل المثال، findstr "</html>$" *
لن ينجح إذا لم يكن هناك CR+LF بعد </html>.
إصدارات Windows المبكرة كانت تملك قيود على طول السطر للأمرين find
و findstr
، بالإضافة إلى أوامر أخرى. إصدارات Windows الأخيرة رفعت هذه القيود، لذا لا داعي للقلق حيال ذلك بعد الآن. تفضل هذا السؤال على StackOverflow لفهم قيود وبقع الخطأ في الأمر findstr
، خاصة في إصدارات Windows المبكرة.
يعمل الأمر findstr باستخدام صفحة OEM (MS DOS) الترميز؛ الرمز المائل لا يطابق أي من الأحرف ASCII الموسعة. ونتيجة لذلك، لا يعد الأمر مفيدًا للنصوص غير الإنجليزية. علاوة على ذلك، لا يمكنك البحث عن أحرف Unicode (UTF-8 أو UTF-16).
الخاتمة
يمكنك التعرف على المفتاحين الإضافيين عن طريق كتابة findstr /?
أو find /?
. على سبيل المثال، يتيح المفتاحين الإضافيين لك البحث في المجلدات الفرعية أو طباعة أرقام السطور. يمكنك أيضًا الرجوع إلى الوثائق الرسمية.
بشكل عام، الأوامر find
و findstr
قديمة وتأتي بمختلف التفرعات والقيود.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt