سؤال

أنا أبحث في ملف دفعي الذي يحدد المتغيرات التالية:

set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
  • ماذا %~d0 أو %~p0 في الواقع يعني ؟
  • هناك مجموعة من المعروف قيم الأشياء مثل الدليل الحالي, حملة, معلمات النص ؟
  • هل هناك أي أخرى مماثلة اختصارات يمكنني استخدامه ؟
هل كانت مفيدة؟

المحلول

السحر المتغيرات %n يحتوي على الحجج المستخدمة لاستدعاء الملف: %0 هو المسار إلى bat الملف نفسه ، %1 هو أول حجة بعد ، %2 هو ثاني وهلم جرا.

منذ الحجج غالبا ما تكون مسارات الملفات ، هناك بعض إضافية جملة من استخراج أجزاء من الطريق. ~d هو محرك الأقراص ، ~p هو المسار (بدون محرك الأقراص) ، ~n اسم الملف.أنها يمكن أن تكون مجتمعة حتى ~dp هو محرك+المسار.

%~dp0 ولذلك مفيدة جدا في bat:هذا هو المجلد الذي المنفذة bat الملف.

يمكنك أيضا الحصول على أنواع أخرى من الفوقية معلومات عن الملف: ~t هو الطابع الزمني ، ~z هو الحجم.

اسمع هنا عن مرجع لجميع أوامر سطر الأوامر.تيلدا-السحر الرموز الموضحة تحت بالنسبة.

نصائح أخرى

هم تعزيز متغير بدائل.فإنها تعدل %N المتغيرات المستخدمة في الملفات الدفعية.مفيدة جدا إذا كنت في دفعة البرمجة في ويندوز.

%~I         - expands %I removing any surrounding quotes ("")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

يمكنك العثور أعلاه عن طريق تشغيل FOR /?.

نعم ، هناك اختصارات أخرى التي يمكنك استخدامها التي ترد أدناه.في الأمر الخاص ، ~d0 يعني حرف محرك 0 الحجة.

~ expands the given variable
d gets the drive letter only
0 is the argument you are referencing

كما 0th الحجة هو السيناريو المسار ، فإنه يحصل على حرف محرك الأقراص المسار بالنسبة لك.يمكنك استخدام الاختصارات التالية أيضا.

%~1         - expands %1 removing any surrounding quotes (")
%~f1        - expands %1 to a fully qualified path name
%~d1        - expands %1 to a drive letter only
%~p1        - expands %1 to a path only
%~n1        - expands %1 to a file name only
%~x1        - expands %1 to a file extension only
%~s1        - expanded path contains short names only
%~a1        - expands %1 to file attributes
%~t1        - expands %1 to date/time of file
%~z1        - expands %1 to size of file
%~$PATH:1   - searches the directories listed in the PATH
               environment variable and expands %1 to the fully
               qualified name of the first one found.  If the
               environment variable name is not defined or the
               file is not found by the search, then this
               modifier expands to the empty string    

%~dp1       - expands %1 to a drive letter and path only
%~nx1       - expands %1 to a file name and extension only
%~dp$PATH:1 - searches the directories listed in the PATH
               environment variable for %1 and expands to the
               drive letter and path of the first one found.
%~ftza1     - expands %1 to a DIR like output line

هذا يمكن أن يكون أيضا مباشرة في موجه الأوامر عند تشغيل الاتصال /?أو /?

من اسم الملف تحليل في ملف دفعي وأكثر التعابير الحقيقي هو كيف:

المسار (بدون محرك) حيث أن النص هو :~p0

محرك الأقراص حيث السيناريو :~d0

نصيحة أخرى من شأنها أن تساعد الكثير هو أن تعيين الدليل الحالي إلى أقراص مختلفة واحد يجب أن تستخدم %~d0 أولا ثم cd %~dp0.سيؤدي ذلك إلى تغيير الدليل إلى ملف دفعي بالسيارة ، ثم التغيير إلى المجلد.

ل #oneLinerLovers, cd /d %~dp0 سيتم تغيير كل من محرك الأقراص والدليل :)

نأمل أن يكون هذا يساعد شخص ما.

%~d0 يعطيك حرف محرك الأقراص من حجة 0 (السيناريو الاسم) ، %~p0 المسار.

بعض gotchas احترس:

إذا كنت انقر نقرا مزدوجا فوق الملف الدفعي %0 سيتم تحيط بك عن طريق الاقتباس.على سبيل المثال, إذا قمت بحفظ هذا الملف باسم c:\test.bat:

@echo %0
@pause

النقر المزدوج فوقه سيفتح لك موجه الأوامر الجديد مع الإخراج:

"C:\test.bat"

ولكن إذا كنت أول من فتح موجه الأوامر و نسميها مباشرة من موجه الأوامر ، %0 سوف أشير إلى ما كنت قد كتبته.إذا كنت نوع test.batأدخل, الإخراج من %0 لن يكون هناك اقتباسات لأنك كتبته لا يقتبس:

c:\>test.bat
test.bat

إذا كنت نوع testأدخل, الإخراج من %0 لن يكون هناك تمديد أيضا لأنك كتبته لا التمديد:

c:\>test
test

نفسه tEsTأدخل:

c:\>tEsT
tEsT

إذا كنت نوع "test"أدخل, الإخراج من %0 سوف يكون ونقلت (منذ كتبته لهم) ولكن لا التمديد:

c:\>"test"
"test"

وأخيرا, إذا كنت نوع "C:\test.bat", الإخراج سيكون تماما كما لو كنت قد النقر المزدوج عليه:

c:\>"C:\test.bat"
"C:\test.bat"

لاحظ أن هذه ليست كل القيم الممكنة %0 يمكن لأنه يمكنك استدعاء البرنامج النصي من المجلدات الأخرى:

c:\some_folder>/../teST.bAt
/../teST.bAt

جميع الأمثلة المبينة أعلاه سوف تؤثر أيضا على %~0, لأن الإخراج من %~0 هو ببساطة إخراج %0 ناقص ونقلت (إن وجدت).

هذا الرمز يفسر استخدام ~تيلدا الحرف الذي كان الأكثر إرباكا شيء بالنسبة لي.مرة واحدة كنت قد فهمت هذا يجعل الأمور أسهل بكثير لفهم:

@ECHO off
SET "PATH=%~dp0;%PATH%"
ECHO %PATH%
ECHO.
CALL :testargs "these are days" "when the brave endure"
GOTO :pauseit
:testargs
SET ARGS=%~1;%~2;%1;%2
ECHO %ARGS%
ECHO.
exit /B 0
:pauseit
pause

فإنه يعرض الموقع الحالي من الملف أو الدليل الذي كنت حاليا في.على سبيل المثال ؛ إذا كان الملف الدفعي كان في الدليل سطح المكتب ، ثم "%~dp0" عرض الدليل سطح المكتب.إذا أردت أن عرض الدليل الحالي مع اسم الملف الحالي هل يمكن أن اكتب "%~dp0%~n0%~x0".

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