it-swarm.asia

كيف يمكنني العثور على موقع للتنفيذ في ويندوز؟

تذكرت أنني استخدمت أداة تسمى where للعثور على مواقع لأي برامج قابلة للتنفيذ مثل هذا في وحدة التحكم:

 C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

الآن لا يمكنني العثور على هذه الأداة. ألست متأكدًا مما إذا كان لدى Windows أداة مضمنة للقيام بهذا البحث؟

128
David.Chu.ca

أعتقد أنك قد تفكر في التي الأمر في لينكس.

$ which bash
/bin/bash

لست على علم بأداة مكافئة في Windows.

EDIT: تذكرت للتو أن هناك حزمة تسمى Unix Utils لنظام Windows يوفر هذه الوظيفة لك.

3
djhowell

وفقًا للإجابة StackOverflow في هل هناك ما يعادل "الذي" على النوافذ؟ ، where.exe يقوم بذلك على Windows 7 و Windows Server 2003 والإصدارات الأحدث:

مثال

C:\> where ping

انتاج:

C:\Windows\System32\PING.EXE
301
Simon D

EDIT: يجب أن أضيف ، إذا لم تتمكن من استخدام الأمر WHERE من موجه الأوامر ، تحقق من متغير PATH. (فقط استخدم الأمر "path".) تأكد من وجود C:\Windows\System32 في المسار الخاص بك. هذا هو المكان "where.exe".

أين هو الأمر الذي تبحث عنه! WHERE يشبه تقاطع بين UNIX Shell المضمنة "أي" والأمر "تحديد موقع" ، حيث أنه يعمل مع كل من الملفات التنفيذية للأوامر والملفات العادية.

كما أنها أكثر تعقيدًا إلى حد ما من هذين الأمرين ، على الرغم من أنها بسيطة بشكل عام

WHERE <file>

سيعمل.

إنه يختلف عن أمر "تحديد الموقع" لأنه لا يبحث في نظام الملفات بأكمله. بدلاً من ذلك ، يتمثل السلوك الافتراضي في البحث عن الملفات في موقعين:

  • الدليل الحالي.
  • كل الدلائل في متغير PATH.

لذلك ، أي أمر يمكنك تشغيله مباشرة من موجه الأوامر دون تحديد الدليل ، سيتم العثور عليه بواسطة أمر 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.

لمزيد من المعلومات ، استخدم "أين /؟". أتمنى أن يساعدك هذا!

19
geo

استخدم dir:

cd \
dir /s /b mytool.exe

يغيرك الجزء cd \ إلى جذر محرك الأقراص ، لضمان بدء البحث في أعلى التسلسل الهرمي.

10
John T

لاحظ أن بعض الأشياء قد تكون مختلفة قليلاً عن 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
7
Rob Jens

محبط أنه ليس مضمنًا كأمر بسيط.

ومع ذلك ، هناك العديد من الحلول ، أحدها هو ملف دفعي .

قم بإنشاء ملف دفعي (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.

3
b w

في نظام Windows ، يمكنك استخدام الأداة المساعدة المجانية محرك بحث كل شيء للبحث على الفور لأي ملف بالاسم الكامل أو الجزئي (إذا تم تنسيق القرص الثابت الخاص بك في نتفس).

3
harrymc

في بوويرشيل

(@($env:path.split(";")) + (pwd).Path)  | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

يمكنك بسهولة تحويل هذا إلى Cmdlet.

هناك طريقة أخرى لتحقيق ذلك ، كما هو مقترح في التعديل:

get-command notepad.exe | select Source
1
Anupam

إذا كنت تريد فقط أي ، فإن GnuWin32 يحتوي المشروع على مجموعة من أدوات unix مع أدوات التثبيت الفردية.

1
Justin Love

إذا كنت بحاجة فقط إلى المسار لبدء تشغيله ، فمن الأفضل في الغالب استخدام الأمر start. على سبيل المثال ، يمكنك استخدام "start chrome.exe" لبدء Chrom {e | ium} ، بغض النظر عن مكان تثبيته.

0
Anonymous Coward