سطر الأوامر .cmd/.bat script، كيفية الحصول على دليل تشغيل البرنامج النصي

StackOverflow https://stackoverflow.com/questions/130112

  •  02-07-2019
  •  | 
  •  

سؤال

كيف يمكنك الحصول على دليل البرنامج النصي الذي تم تشغيله واستخدامه داخل ملف .cmd؟

هل كانت مفيدة؟

المحلول

لدى ريموند تشين بعض الأفكار:

https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573

مقتبس هنا بالكامل لأن أرشيفات MSDN تميل إلى أن تكون غير موثوقة إلى حد ما:

الطريقة السهلة هي استخدام %CD% متغير زائف.يمتد إلى دليل العمل الحالي.

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(بالطبع ، كان من السهل القيام بـ Directory Save/Restore pushd/popd, ، ولكن ليس هذا هو الهدف هنا.)

ال %CD% الحيلة سهلة الاستخدام حتى من سطر الأوامر.على سبيل المثال ، غالبًا ما أجد نفسي في دليل حيث يوجد ملف أريد العمل عليه ولكن ...أوه ، أنا بحاجة إلى chdir إلى دليل آخر من أجل إجراء هذه العملية.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

(أحب أن أستخدم %_% كمتغير بيئة الصفر الخاص بي.)

يكتب SET /? لرؤية المتغيرات الزائفة الأخرى المقدمة من معالج الأوامر.

كما أن التعليقات الواردة في المقالة تستحق المسح، على سبيل المثال هذا التعليق (عبر WayBack Machine، نظرًا لأن التعليقات قد اختفت من المقالات القديمة):

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

يغطي هذا استخدام %~dp0:

إذا كنت تريد معرفة مكان وجود الملف الدفعي: %~dp0

%0 هو اسم الملف الدفعي. ~dp يمنحك محرك الأقراص ومسار الوسيطة المحددة.

نصائح أخرى

وهذا يعادل مسار البرنامج النصي:

%~dp0

يستخدم هذا بناء جملة ملحق معلمة الدفعة.المعلمة 0 هي دائمًا البرنامج النصي نفسه.

إذا تم تخزين البرنامج النصي الخاص بك في C:\example\script.bat, ، ثم %~dp0 يقيم ل C:\example\.

ss64.com يحتوي على مزيد من المعلومات حول بناء جملة ملحق المعلمة.هنا المقتطف ذو الصلة:

يمكنك الحصول على قيمة أي معلمة باستخدام % متبوعة بموضعها الرقمي في سطر الأوامر.

[...]

عند استخدام معلمة لتوفير اسم ملف، يمكن تطبيق بناء الجملة الموسع التالي:

[...]

%~d1 قم بتوسيع %1 إلى حرف محرك الأقراص فقط - C:

[...]

%~p1 قم بتوسيع %1 إلى مسار فقط على سبيل المثال.\utils\ يتضمن ذلك حرف \ زائدًا والذي يمكن تفسيره على أنه حرف هروب بواسطة بعض الأوامر.

[...]

يمكن دمج المعدلات المذكورة أعلاه:

%~dp1 قم بتوسيع %1 إلى حرف محرك الأقراص والمسار فقط

[...]

يمكنك الحصول على اسم مسار البرنامج النصي الدفعي نفسه باستخدام %0، ويمكن تطبيق امتدادات المعلمات على هذا بحيث يقوم %~dp0 بإرجاع محرك الأقراص والمسار إلى البرنامج النصي الدفعي على سبيل المثال.ث:\البرامج النصية\

for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

مصدر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top