تذكرت أنني استخدمت أداة تسمى where
للعثور على مواقع لأي برامج قابلة للتنفيذ مثل هذا في وحدة التحكم:
C:\Tmp\Where myTool.exe
C:\Program Files\MyApp\myTools.exe
....
الآن لا يمكنني العثور على هذه الأداة. ألست متأكدًا مما إذا كان لدى Windows أداة مضمنة للقيام بهذا البحث؟
أعتقد أنك قد تفكر في التي الأمر في لينكس.
$ which bash
/bin/bash
لست على علم بأداة مكافئة في Windows.
EDIT: تذكرت للتو أن هناك حزمة تسمى Unix Utils لنظام Windows يوفر هذه الوظيفة لك.
وفقًا للإجابة StackOverflow في هل هناك ما يعادل "الذي" على النوافذ؟ ، where.exe
يقوم بذلك على Windows 7 و Windows Server 2003 والإصدارات الأحدث:
C:\> where ping
C:\Windows\System32\PING.EXE
EDIT: يجب أن أضيف ، إذا لم تتمكن من استخدام الأمر WHERE من موجه الأوامر ، تحقق من متغير PATH. (فقط استخدم الأمر "path".) تأكد من وجود C:\Windows\System32 في المسار الخاص بك. هذا هو المكان "where.exe".
أين هو الأمر الذي تبحث عنه! WHERE يشبه تقاطع بين UNIX Shell المضمنة "أي" والأمر "تحديد موقع" ، حيث أنه يعمل مع كل من الملفات التنفيذية للأوامر والملفات العادية.
كما أنها أكثر تعقيدًا إلى حد ما من هذين الأمرين ، على الرغم من أنها بسيطة بشكل عام
WHERE <file>
سيعمل.
إنه يختلف عن أمر "تحديد الموقع" لأنه لا يبحث في نظام الملفات بأكمله. بدلاً من ذلك ، يتمثل السلوك الافتراضي في البحث عن الملفات في موقعين:
لذلك ، أي أمر يمكنك تشغيله مباشرة من موجه الأوامر دون تحديد الدليل ، سيتم العثور عليه بواسطة أمر WHERE. (لأن أي أمر مثل هذا موجود بالفعل في قائمة المتغيرات PATH.)
إذا كنت تريد البحث فقط في متغير مسار الأوامر ، يمكنك استخدام:
WHERE "$path:<search text>"
من ناحية أخرى ، إذا كنت ترغب في العثور على جميع نسخ الملف في شجرة الدليل ، يمكنك استخدام:
WHERE /R <Top Level Directory> <search text>
أخيرًا ، سوف تجد WHERE أوامر وأي ملفات ذات امتداد من متغير PATHEXT دون تضمين الملحق. يجب تحديد جميع الملفات الأخرى إما بدقة أو باستخدام أحرف البدل.
خذ على سبيل المثال الملفات "dxdiag.exe" و "dxdiagn.dll". لاحظ الأمر التالي وإخراجه:
WHERE /R C:\Windows dxdiag
C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\AMD64_Microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_Microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe
نجح في إرجاع كافة إصدارات "dxdiag.exe" لأن ".exe" أحد الملحقات في متغير PATHEXT. (ملاحظة: "WHERE dxdiag" كانت ستعمل بشكل جيد ، لأن C:\Windows\System32 في متغير PATH.)
WHERE /R C:\Windows dxdiagn
من ناحية أخرى ، فشل في إرجاع أي نتيجة ، لأن ".dll" هو لا في PATHEXT.
في هذه الحالة ، انظر إلى النتيجة التي توفرها إضافة أحرف البدل:
WHERE /R C:\Windows dxdiagn*
C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\AMD64_Microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\AMD64_Microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_Microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_Microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll
تقوم بإرجاع الكل إصدارات dxdiagn.dll.
لمزيد من المعلومات ، استخدم "أين /؟". أتمنى أن يساعدك هذا!
استخدم dir
:
cd \
dir /s /b mytool.exe
يغيرك الجزء cd \
إلى جذر محرك الأقراص ، لضمان بدء البحث في أعلى التسلسل الهرمي.
لاحظ أن بعض الأشياء قد تكون مختلفة قليلاً عن PowerShell:
PS C:\Users\Rob.wb-devel> where ping
PS C:\Users\Rob.wb-devel> where git
PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe
PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe
محبط أنه ليس مضمنًا كأمر بسيط.
ومع ذلك ، هناك العديد من الحلول ، أحدها هو ملف دفعي .
قم بإنشاء ملف دفعي (which.bat) كما يلي:
@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i
هذا يظهر في الدليل المحلي ، سيستغرق معلمة اسم ملف مع أو بدون ملحق ، ويعود المطابقة الأولى من الدليل الحالي أو في PATH.
ثم قم بتشغيله مثلwhich cmd.exe
للعثور على cmd.exe الذي سيتم تنفيذه إذا قمت بكتابة cmd
.
في نظام Windows ، يمكنك استخدام الأداة المساعدة المجانية محرك بحث كل شيء للبحث على الفور لأي ملف بالاسم الكامل أو الجزئي (إذا تم تنسيق القرص الثابت الخاص بك في نتفس).
في بوويرشيل
(@($env:path.split(";")) + (pwd).Path) | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }
يمكنك بسهولة تحويل هذا إلى Cmdlet.
هناك طريقة أخرى لتحقيق ذلك ، كما هو مقترح في التعديل:
get-command notepad.exe | select Source
إذا كنت بحاجة فقط إلى المسار لبدء تشغيله ، فمن الأفضل في الغالب استخدام الأمر start. على سبيل المثال ، يمكنك استخدام "start chrome.exe" لبدء Chrom {e | ium} ، بغض النظر عن مكان تثبيته.