0.00 (1 )
النهج العام.
ملفات الأوامر هي ملفات نصية ذات امتداد مضربأو كمد، والتي تمثل أسطرها أوامر أو أسماء الملفات القابلة للتنفيذ. عند تشغيل ملف دفعي، يتم التحكم فيه بواسطة معالج أوامر نظام التشغيل (يسمى غالبًا مترجم الأوامر)، والذي يقرأ ويفسر الأسطر الموجودة في الملف الدفعي بشكل تسلسلي. بالنسبة لنظام التشغيل Windows9X يتم ذلك com.command.com، لـ WinNT/2K/XP - cmd.exe. يمكن أن تحتوي أسطر الملفات الدفعية على أوامر من معالج الأوامر نفسه (FOR، GOTO، IF، وما إلى ذلك) أو أسماء الوحدات القابلة للتنفيذ (net.exe، وregedit.exe، وwin.com، وما إلى ذلك). في أنظمة التشغيل WinNT/2K/XP، يمكنك الحصول على مساعدة مختصرة حول تكوين الأوامر باستخدام سطر الأوامر:
أو بأمر محدد:
مساعدة اسم الأمر
لعرض نص التعليمات ليس على الشاشة، ولكن في ملف، يمكنك استخدامه إعادة توجيه الإخراج . عند استخدام سطر الأوامر، يكون جهاز الإدخال الافتراضي هو لوحة المفاتيح وجهاز الإخراج هو الشاشة، ومع ذلك يمكن إعادة تعيين هذه الأجهزة باستخدام أحرف إعادة التوجيه
< - إعادة توجيه الإدخال
> - إعادة توجيه الإخراج (أو > > - إعادة التوجيه إلى ملف موجود، عندما يتم إلحاق بيانات الإخراج بنهاية الملف.)
لإخراج دفق بيانات الأمر
يساعدفي ملف help.txt، سيكون سطر الأوامر كما يلي:مساعدة> مساعدة.txt
لعرض المساعدة للأمر GOTO في ملف goto.txt:
مساعدة انتقل إلى> goto.txt
استخدام متغيرات البيئة.
في الملفات الدفعية، يمكنك، بل ويجب عليك في كثير من الأحيان، استخدامها متغيرات البيئة - المتغيرات التي تميز قيمها البيئة التي يتم فيها تنفيذ الأمر أو الملف الدفعي. يتم إنشاء قيم متغيرات البيئة عند تشغيل نظام التشغيل وتسجيل المستخدم في النظام، ويمكن أيضًا ضبطها باستخدام الأمرتعيين، وصيغتها هي:
تعيين [متغير=[سلسلة]]
عاملاسم متغير البيئة
خطسلسلة أحرف مخصصة للمتغير المحدد.
على سبيل المثال، سطر الأوامر
تعيين mynane = فاسيا
سيضيف متغير myname الذي يأخذ القيمة Vasya.
يمكنك الحصول على قيمة المتغير في البرامج والملفات الدفعية باستخدام اسمه محاطًا بعلامات النسبة المئوية ( %) . على سبيل المثال الأمر
سيتم عرض كلمة الوقت، والأمر
سيتم عرض قيمة متغير الوقت، الذي يأخذ قيمة الوقت الحالي.
وسطر الأوامر
تعيين المسار=C:myprog;%path%
سيضيف الدليل C:myprog إلى مسار البحث عن البرامج القابلة للتنفيذ، الموضحة بقيمة متغير PATH
يؤدي تنفيذ أمر SET بدون معلمات إلى عرض القيم الحالية للمتغيرات على الشاشة بالشكل:
NUMBER_OF_PROCESSORS=1 - عدد المعالجات
OS=Windows_NT - نوع نظام التشغيل
Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar - مسار البحث عن الملفات القابلة للتنفيذ.
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - امتدادات للملفات القابلة للتنفيذ.
PROCESSOR_ARCHITECTURE=x86 - بنية المعالج.
PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 الخطوة 1، AuthenticAMD - معرف المعالج.
PROCESSOR_LEVEL=6 - مستوى المعالج (رقم الطراز).
PROCESSOR_REVISION=0801 - إصدار المعالج.
ProgramFiles=E:ملفات البرنامج - المسار إلى مجلد "ملفات البرنامج".
PROMPT=$P$G - تنسيق موجه سطر الأوامر $P - المسار للدليل الحالي $G - علامة ">".
SystemDrive=E: - حرف محرك أقراص النظام.
SystemRoot=E:WINDOWS - دليل نظام التشغيل Windows.
لا يتم إرجاع قيم بعض المتغيرات بواسطة أمر SET. هذه هي المتغيرات التي تتغير قيمها ديناميكيًا:
%CD% - يأخذ قيمة سلسلة الدليل الحالية.
%DATE% - يأخذ قيمة التاريخ الحالي.
%TIME% - يقبل قيمة الوقت الحالية.
%RANDOM% - يقبل قيمة الرقم العشري العشوائي في النطاق من 1 إلى 32767.
%ERRORLEVEL% - يقبل القيمة الحالية لرمز الخروج الخاص بالمهمة ERRORLEVEL
%CMDEXTVERSION% - يأخذ قيمة إصدار معالج الأوامر CMD.EXE لمعالجة الأوامر الموسعة.
%CMDCMDLINE% - يأخذ قيمة السطر الذي يسمى الصدفة.
يمكنك استخدام سطر الأوامر لعرض قيمة المتغير:
إيكو %متغير%
معلمات الإدخال للملف الدفعي.
من الممكن تمرير معلمات سطر الأوامر إلى ملف الأوامر واستخدام قيمها في البيانات الموجودة في ملف الأوامر نفسه.
ملف الخفافيش< параметр1 > , < параметр2 >, ... < параметрN >
في الملف الدفعي نفسه، ستكون المعلمة الأولى متاحة كمتغير %1 ، ثانية - %2 وما إلى ذلك وهلم جرا. اسم الملف الدفعي نفسه متاح كمتغير %0 . على سبيل المثال، لنقم بإنشاء ملف دفعي ستكون مهمته عرض قيم المعلمات المدخلة على الشاشة. عادةً ما يكون الأمر المستخدم لعرض النص هو
صدى صوت< текст >
ومع ذلك، إذا تم استبدال النص بـ %1، فسيتم إرجاع المعلمة الأولى، مع %2 - الثانية، وما إلى ذلك.
قم بإنشاء ملف parm.bat بالمحتوى التالي:
صدى المعلمة الأولى=%1
صدى المعلمة الثانية=%2
صدى المعلمة الثالثة = %3
وتشغيله باستخدام الأمر التالي:
parm.bat الثانية الأولى "كلمتان"
بعد تنفيذه، ستفهم كيفية عمله وأن المعلمات ذات المسافات يجب أن تكون محاطة بعلامات اقتباس مزدوجة. لمنع عرض الخطوط التي تمت معالجتها بواسطة معالج الأوامر على الشاشة، يمكنك استخدام الأمر
صدى خارج، ووضعه على السطر الأول من الملف الدفعي. لجعل سطرًا في ملف دفعي يتم تجاهله بواسطة الصدفة، ضعه في بداية السطرم.< пробел > . بهذه الطريقة يمكنك وضع التعليقات، والتي غالبًا ما تكون مفيدة في الملفات الدفعية الكبيرة:يقوم rem ECHO OFF بإيقاف تشغيل وضع عرض محتويات سطور ملفات الأوامر على الشاشة
سوف يعرض REM نتيجة تنفيذها فقط.
صدى المعلمة الأولى=%1
صدى المعلمة الثانية=%2
صدى المعلمة الثالثة = %3
حاول استبدال ECHO OFF بـECHO OFF - النتيجة تتحدث عن نفسها. لم يعد يتم عرض الخط الذي يقوم بإيقاف تشغيل وضع الإخراج على الشاشة.
التحولات والتسميات.
في الملفات الدفعية، يمكنك استخدام أوامر الانتقال الشرطي التي تغير منطق عملها اعتمادًا على استيفاء شروط معينة. لتوضيح كيفية استخدام الانتقالات الشرطية، فلنقم بإنشاء ملف دفعي يكون غرضه تعيين حرف محرك أقراص محدد مسبقًا للوسائط القابلة للإزالة، والتي ستكون محركات أقراص فلاش. الشروط هي كما يلي - يوجد محركي أقراص فلاش، أحدهما يجب أن يكون مرئيًا في Explorer كمحرك الأقراص X: والثاني كمحرك الأقراص Y:، بغض النظر عن منفذ USB المتصلين به. سنفترض أنه يمكن توصيل الأقراص الحقيقية كـ F: أو G: سنحدد الأقراص من خلال وجود ملف باسم معين (من الأفضل جعل مثل هذا الملف مخفيًا في الدليل الجذر وتسميته بشيء غير معتاد):
Flashd1.let - على القرص الأول
Flashd2.let - في الثانية
أولئك. الغرض من الملف الدفعي هو التحقق من وجود الأقراص القابلة للإزالة F:و ز:ملفات Flashd1.letأو Flashd2.letواعتمادًا على أي واحد موجود، قم بتعيين حرف محرك أقراص العاشر:أو ص:
للبحث عن ملف على القرص، استخدم الأمر
في حالة وجود:أمر اسم الملف إذا كان موجودًا
أسهل طريقة لاستخدامه كأمر هيفرعية، والذي يطابق اسم محرك الأقراص والدليل.
الفرع العاشر: ج: - ينشئ قرصًا افتراضيًا X:، وستكون محتوياته هي الدليل الجذر لمحرك الأقراص C:
قم بإنشاء ملف دفعي setXY.bat باستخدام الأسطر التالية:
بعد تنفيذ مثل هذا الملف، سيكون لديك محركات الأقراص X: وY: ولكن إذا قمت بتنفيذ مثل هذا الملف مرة أخرى، فسيعرض الأمر SUBST رسالة خطأ - بعد كل شيء، محركات الأقراص X: وY: موجودة بالفعل.
يُنصح بتجاوز تنفيذ SUBST إذا تم بالفعل إنشاء الأقراص الافتراضية X: وY: (أو قم بحذفها باستخدام SUBST مع المعلمة -d قبل التثبيت). تعديل الملف الدفعي باستخداماذهب إلى- نقل التحكم إلى سطر من الملف الدفعي عن طريق التسمية.
اذهب إلى التسمية
يجب أن تكون التسمية على سطر منفصل وتبدأ بنقطتين. فلنقم بإجراء تغييرات على الملف الدفعي الخاص بنا حتى لا نتلقى رسائل خطأ:
REM إذا لم يكن X موجودًا - فانتقل إلى ملصق SETX
إذا لم يكن موجودًا X: انتقل إلى SETX
REM في حالة وجود X: - دعنا ننتقل إلى التحقق من وجود Y:
إذا كان موجودًا G:flashd1.let SUBST X: G:
إذا كان موجودًا F:flashd1.let SUBST X: F:
REM إذا كان Y: موجودًا - أكمل الملف الدفعي.
إذا كان موجودًا Y: انتقل إلى الخروج
إذا كان موجودًا G:flashd2.let SUBST Y: G:
إذا كان موجودًا F:flashd2.let SUBST Y: F:
خروج REM من الملف الدفعي
لقد اختفت رسالة الخطأ SUBST. يمكن تتبع علامات الأخطاء عند تنفيذ الأوامر في ملف الأوامر نفسه عن طريق تحليل المتغيرمستوى الخطأوالتي تتشكل قيمتها أثناء تنفيذ معظم البرامج. ERRORLEVEL هو 0 إذا اكتمل البرنامج بدون أخطاء و1 إذا حدث خطأ. وقد تكون هناك قيم أخرى إذا تم توفيرها في البرنامج المنفذ.
يمكنك أيضًا استخدام ملف دفعي كأمر على سطر في ملف دفعي. علاوة على ذلك، لنقل والعودة إلى نقطة تنفيذ الملف الدفعي الاستدعاء، يتم استخدام الأمريتصل. لنقم بإنشاء ملف أوامر test.bat بالمحتوى التالي:
إيكو نداء 1.bat
عودة إيكو.
وملف 1.bat يحتوي على الأمريوقف،تعليق تنفيذ ملف دفعي حتى يتم الضغط على أي مفتاح.
عند تنفيذ test.bat، سيتم عرض رسالة على الشاشة
اتصل بـ 1.بات
وسيتم منح التحكم إلى 1.bat باستخدام أمر الإيقاف المؤقت. بعد الضغط على أحد المفاتيح الموجودة على لوحة المفاتيح، سيتم التحكم في سطر الأوامر "ECHO Return". وسيتم عرضه على الشاشة
إذا قمت بإزالة CALL من test.bat، فلن يتم تنفيذ الإرجاع من الملف 1.bat. بالمناسبة، من خلال نقل التحكم إلى ملف دفعي، يمكنك تنظيمه للتكرار. حاول إضافة السطر التالي إلى نهاية ملف test.bat:
يمكنك الخروج من حلقة الملف الدفعي بالضغط على تركيبة CTRL-Break. من الممكن استخدام الأمر CALL لاستدعاء إجراء داخل ملف دفعي. في هذه الحالة، الوسيطة ليست اسم الملف الخارجي، بل التسمية:
....
الاتصال:proc1
....
:proc1
....
مخرج
....
إنشاء الملفات.
لا يوجد أمر خاص في نظام التشغيل Windows لإنشاء ملف، ولكن يمكنك الاستغناء عنه بسهولة بعدة طرق:
النسخ من وحدة التحكم إلى الملف
انسخ ملف myfile.txt
عند تنفيذ هذا الأمر، سيتم كتابة البيانات من لوحة المفاتيح (جهاز CON) إلى الملف myfile.txt. سيؤدي الضغط على F6 أو CTRL-Z إلى إكمال الإخراج.
إعادة توجيه الإخراج
صدى 1> ملفي.txt
سيؤدي تشغيل هذا الأمر إلى إنشاء ملف myfile.txt يحتوي على الحرف "1"
الجمع بين إعادة توجيه المدخلات والمخرجات:
نسخ CON > ملفي.txt< xyz
عند تنفيذ هذا الأمر، كما في الحالة الأولى، يتم استخدام النسخ من وحدة التحكم إلى ملف، ولكن بدلاً من الإدخال من لوحة المفاتيح، يتم استخدام الإدخال من الجهاز غير الموجود xyz. سيعرض النظام رسالة تفيد بعدم وجود مثل هذا الجهاز، ولكن سيتم إنشاء الملف الفارغ myfile.txt بنجاح.
الخيار البسيط للغاية هو النسخ من جهاز وهمي يحمل الاسم لاغيةإلى ملف.
انسخ ملف myfile.txt فارغًا
إذا كنت تحتاج في كثير من الأحيان إلى إنشاء ملفات فارغة، فيمكنك إعداد ملف دفعي خاص بك (على سبيل المثال، newfile.bat أو حتى أفضل، nf.bat)، وتمرير اسم الملف الذي سيتم إنشاؤه كمعلمة عند التشغيل.
محتويات الملف:
ضع هذا الملف الدفعي في دليل النظام لديك (C:windowssystem32 أو أي شيء موجود في مسار بحث PATH).
سطر الأوامر:
newfile.bat myfile.txt
أو
nf.bat myfile.txt
أو
نف myfile.txt
هنا فريقك nfلإنشاء ملف فارغ في سطر الأوامر.
تعيين نفس حرف محرك الأقراص إلى محرك أقراص قابل للإزالة.
@صدى خارج
معالجة ملف الصدى - %0
ECHO تاريخ/وقت إنشاء/تعديل الملف الدفعي - %~t0
مسار الملف الدفعي ECHO - "%~f0"
قرص ملف أمر ECHO - %~d0
دليل الملفات الدفعية ECHO - "%~p0"
اسم الملف الدفعي ECHO - %~n0
امتداد الملف الدفعي ECHO - %~x0
ECHO الاسم المختصر والامتداد - %~s0
سمات الملف الدفعي ECHO - %~a0
حجم الملف الدفعي ECHO - %~z0
إنشاء أجيال من الأرشيفات بناءً على التواريخ والأوقات.
دعونا نحل المشكلة التالية - نحتاج إلى إنشاء أرشيف للملفات الموجودة في الدليل C:Program FilesFAR. يجب أن يتكون اسم ملف الأرشيف من الوقت الحالي (ساعات.دقائق.ثواني - HH.MM.SS.rar)، ويجب وضعه في دليل جديد، يجب أن يتكون اسمه من التاريخ الحالي (يوم) .شهر.سنة - د.ش.س.س.س. للأرشفة سوف نستخدم أرشيفي RAR. تنسيق الإطلاق لإنشاء أرشيف:
رار أ -ر< путь и имя архива > < Путь и имя архивируемых данных >
أ- أمر إنشاء الأرشيف.
-ص- المفتاح الذي يحدد أرشفة الدلائل الفرعية (نظرًا لوجود أدلة فرعية في المجلد المصدر).
وبالتالي، لحل المشكلة، تحتاج إلى إنشاء أسماء ومسارات لـ RAR بشكل صحيح. ولهذا سوف نستخدم العوامل التالية:
يبدو التاريخ الذي تم الحصول عليه من المتغير %DATE% بالإعدادات الإقليمية القياسية كما يلي: تعيين VDATE=%التاريخ:~3% قم بإنشاء دليل على محرك الأقراص C:، اسمه = التاريخ الحالي من المتغير VDATE: إم دي ج:\%VDATE% الوقت الذي تم الحصول عليه من المتغير %TIME%: لنبدأ تشغيل الأرشيف: يمكنك الآن إنشاء ملف دفعي بالمحتويات: تعيين VDATE=%التاريخ:~3% يمكن تنفيذ مثل هذا الملف الدفعي من خلال التحميل التلقائي، أو كجزء من برنامج نصي، عندما يقوم المستخدم بتسجيل الدخول إلى المجال، أو باستخدام برنامج جدولة في وقت معين، وسيكون لديك دائمًا أرشيفات مرتبة حسب الوقت للبيانات المهمة المتاحة.
يقوم هذا الملف الدفعي بإنشاء أرشيفات لمحتويات مجلد "المستندات" الخاص بمستخدمي Win2K/XP، ووضعها في الدلائل |
تتيح لك متغيرات البيئة المستخدمة في الملفات الدفعية (الأوامر) تجنب تحديد المسارات المطلقة للأدلة. على سبيل المثال، إذا لم نكن نعرف حرف محرك أقراص النظام مسبقًا، فيمكننا دائمًا استخدام المتغير %محرك النظام%، والذي يقوم بإرجاع حرف محرك الأقراص المثبت عليه نظام التشغيل. يتم أيضًا استخدام المتغيرات لتحسين التعليمات البرمجية - يمكن تعيين متغير قصير للمعلمة المتكررة بشكل متكرر (على سبيل المثال، مفتاح التسجيل). تتناول هذه المقالة بالتفصيل التقنيات المختلفة للتعامل مع المتغيرات، بالإضافة إلى طرق تغيير وإنشاء متغيرات جديدة. الآن دعونا نتحدث عن كل شيء بالترتيب.
يعد Windows Command Shell (cmd.exe) أداة قوية جدًا للعمل مع النظام. يمكن للملفات الدفعية أتمتة قدر لا بأس به من المهام، ولهذا السبب يتم استخدامها غالبًا لتثبيت Windows تلقائيًا. يتيح لك الاستخدام الماهر للمتغيرات في الملفات الدفعية حل مجموعة واسعة من المشكلات. يصبح العمل مع غلاف الأوامر أكثر كفاءة وفي نفس الوقت يتم تبسيط التعليمات البرمجية للملفات الدفعية. يمكنك العثور على أمثلة أخرى لاستخدام المتغيرات على صفحات الموقع أو المنتدى. جميع الأمثلة المستخدمة في هذه المقالة مأخوذة من نصوص المشاركين، ولهم جزيل الشكر.
قذيفة القيادةهو منتج برمجي منفصل يوفر اتصالاً مباشرًا بين المستخدم ونظام التشغيل. توفر واجهة مستخدم نص سطر الأوامر بيئة لتشغيل التطبيقات والأدوات المساعدة المستندة إلى النص.
cmd.exe- مترجم الأوامر الذي تستخدمه واجهة أوامر نظام التشغيل Windows لترجمة الأمر المُدخل إلى تنسيق يفهمه النظام.
جلسة الفريقيمكن أن تبدأ إما عن طريق الإطلاق cmd.exeوعن طريق تشغيل ملف دفعي. بمعنى آخر، يتم إنشاء غلاف الأوامر الحالي. وبناء على ذلك، فإن الخروج من هذه الصدفة (على سبيل المثال، إنهاء ملف دفعي) يؤدي إلى إنهاء جلسة الأوامر.
جلسة المستخدم(جلسة المستخدم) تبدأ عندما يقوم المستخدم بتسجيل الدخول (تسجيل الدخول) وتنتهي عندما يقوم المستخدم بتسجيل الخروج (تسجيل الخروج).
في هذه المقالة:
تعريف المتغيرات
تعيين<Имяпеременной>=<Значениепеременной>
يعد بيان SET امتدادًا لخيارات نظام التشغيل للتعامل مع المعلمات. يحدد متغيرًا يتم استبدال قيمته باسمه كلما تم استخدام هذا الاسم بين علامات النسبة المئوية. لذلك، إذا تم توفيره (متغير تتطلبه العديد من الألعاب التي تستخدم بطاقة الصوت للكمبيوتر):
مجموعة مكبر = A220 I5 D1 P330
ثم عند استخدام البناء التالي في ملف دفعي:
صدى % بلاستر %
سيتم عرض "A220 I5 D1 P330". تسمى المتغيرات المحددة باستخدام عبارة SET متغيرات البيئة وتكون مرئية بعد التنفيذ حتى تتم إعادة تشغيل DOS (ما لم يتم تغييرها يدويًا في الذاكرة). أي أنه يمكن استخدامه من ملف دفعي أو برنامج بعد تحديده في ملف دفعي آخر. أشهرها هو متغير PATH، وهو عبارة عن مجموعة من المسارات للبحث السريع عن الملفات. تم تعيينه في ملف autoexec.bat.
متغيرات سطر الأوامر
(معلمات استدعاء ملف الخفافيش)
%<цифра 0-9>
كما هو الحال في أي لغة، في لغة الملف الدفعي، من الممكن استخدام المتغيرات المستلمة كمعلمات لملف الخفافيش.
يمكن أن يكون هناك إجمالي 10 متغيرات مستقلة موجودة في وقت واحد. هذا صغير جدًا لكتابة البرامج المعقدة، على الرغم من أن 3-4 غالبًا ما يكون كافيًا للعمل العادي. قيمة المتغير تساوي قيمة المعلمة المقابلة من سطر الأوامر. سيحتوي المتغير %0 على اسم ملف .bat، وإذا قمت بتحديده، المسار إليه. أي إذا قمت بتشغيل ملف abc.bat بالمعلمات التالية:
abc.bat قبل الميلاد مواطنه
فإن المتغير %0 سيحتوي على القيمة abc.bat ، و %1 سيحتوي على القيمة a ، و %2 سيحتوي على bc ، و %3 سيحتوي على def . تُستخدم هذه الخاصية على نطاق واسع لإنشاء ملفات دفعية متعددة الاستخدامات عند التعامل مع العمليات المتكررة.
للحصول على أكثر من 10 متغيرات من سطر الأوامر، يمكنك استخدام الأمر SHIFT.
يسمح لك الأمر SHIFT باستخدام أكثر من 10 معلمات لسطر الأوامر، ومع ذلك، يتم فقدان المعلمات السابقة المقابلة. بمعنى آخر، يقوم أمر SHIFT بنقل كافة القيم المتغيرة خطوة واحدة إلى اليسار. أي أن المتغير %0 سيحتوي على القيمة الموجودة مسبقًا في المتغير %1، والمتغير %1 سيحتوي على قيمة المتغير %2 قبل النقل. ومع ذلك، هذه العملية لا رجعة فيها، أي أنه من المستحيل تحويل المتغيرات مرة أخرى.
إذا عامل الشرطي
لحسن الحظ، يدعم مترجم الأوامر cmd.exe لنظام التشغيل Windows 2000 الحديث والإصدارات الأحدث كتل الأوامر في البنيات المتفرعة، مما يلغي الحاجة إلى IFs ذات التسميات. يتم وضع كتل الأوامر بين قوسين. يبدو مثل هذا (تقليد نمط المسافة البادئة C/C++):
إذا كان الشرط (
أوامر Rem للفرع "ثم".
ريم...
) آخر (
أوامر Rem للفرع "آخر".
ريم...
مثال الاستخدام المحدد:
@صدى خارج
قم بتعيين BUILDMODE=%1
إذا كان "%BUILMODE%" == "" (
فشل الارتداد: الوسيطة مطلوبة ^(--تصحيح، --release^)
خروج /ب1
rem قم بإزالة كافة الواصلات من الوسيطة لتبسيط المعالجة
تعيين BUILDMODE=%BUILDMODE:-=%
إذا كان "%BUILDMODE%" == "تصحيح" (
اضبط CCFLAGS=/Od /MDd /Z7
) آخر (
اضبط CCFLAGS=/O2 /MD
في رأيي، من الممكن التعايش مع هذا الأمر. ولكن، كما هو الحال دائمًا، الحياة ليست بسيطة كما تبدو. هناك مشكلة واحدة. يتم توسيع المتغيرات المستخدمة في كتلthen and else قبل بدء تنفيذ الكتل، وليس أثناء التنفيذ. في المثال الموضح، لا يسبب هذا أي مشاكل، ولكن في ما يلي سوف:
إذا كان "%BUILDMODE%" == "تصحيح" (
معلومات الصدى: ضبط وضع بيئة التصحيح
اضبط OPTFLAGS=/Od
اضبط CCFLAGS=%OPTFLAGS% /MDd /Z7
) آخر (
معلومات الصدى: ضبط وضع إصدار البيئة
اضبط OPTFLAGS=/O2
قم بتعيين CCFLAGS=%OPTFLAGS% /MD
المهم هو أنه في كلا الكتلتين، سيتم استبدال المتغير OPTFLAGS قبل تغييره أثناء تنفيذ تلك الكتلة. وفقًا لذلك، سيتم ملء CCFLAGS بالقيمة التي كانت لدى OPTFLAGS في وقت تنفيذ هذا الحظر.
يتم حل هذه المشكلة باستخدام التوسع المتغير المؤجل. المتغيرات الموجودة في !...! بدلاً من %...%، سيتم الكشف عن معانيها فقط في لحظة الاستخدام المباشر. يتم تعطيل هذا الوضع بشكل افتراضي. يمكنك تمكينه إما باستخدام رمز التبديل /V:ON عند استدعاء cmd.exe، أو باستخدام الأمر:
في نص ملف الخفافيش نفسه. تبدو الطريقة الثانية أكثر ملاءمة بالنسبة لي - ليس من الرائع أن تطلب من شخص ما تشغيل البرنامج النصي الخاص بك باستخدام معلمة معينة.
ومع ذلك، يمكن تصحيح المثال "الخاطئ" السابق على النحو التالي:
setlocal Enableedelayedexpansion
إذا كان "%BUILDMODE%" == "تصحيح" (
معلومات الصدى: إعداد بيئة وضع التصحيح
اضبط OPTFLAGS=/Od
قم بتعيين CCFLAGS=!OPTFLAGS! /MDd /Z7
) آخر (
معلومات الصدى: إعداد بيئة وضع الإصدار
اضبط OPTFLAGS=/O2
قم بتعيين CCFLAGS=!OPTFLAGS! /إم دي
الآن هذه كتلة كاملة تقريبًا إذا كان الأمر كذلك. تقريبًا، لأنه إذا واجهت قوس إغلاق في أحد أوامر الصدى، فستحتاج إلى الهروب منه باستخدام الحرف ^، وإلا فسيرتبك المحلل اللغوي...
لكن على أية حال، هذا أفضل بكثير من العدد الهائل من العلامات والانتقالات.
المهام
هل من الممكن إنشاء دالة في ملف الخفافيش؟ نعم يمكنك ذلك. علاوة على ذلك، في بعض الأحيان يكون ذلك ضروريا. صحيح أنه يمكن تسمية هذه الوظائف بشروط.
يوجد بناء جملة خاص لأمر الاتصال، والذي يسمح لك بالانتقال إلى علامة في نفس ملف الخفافيش، مع تذكر المكان الذي تم إجراء هذه المكالمة منه:
استدعاء: وسيطات التسمية
يتم إرجاع الدالة بالأمر:
الخروج /ب [رمز الإرجاع الاختياري]
المفتاح /b مهم جدًا هنا: بدونه لن تخرج من الوظيفة، بل من البرنامج النصي بشكل عام.
للحصول على التفاصيل، اكتب في سطر الأوامر:
يتصل/؟
مخرج /؟
ومن المثير للاهتمام أن أمر الاستدعاء باستخدام بناء الجملة هذا يدعم الاستدعاءات العودية مع الإنشاء التلقائي لإطار جديد للوسائط المتغيرة %0-%9. في بعض الأحيان قد يكون هذا مفيدًا. فيما يلي مثال كلاسيكي لحساب العوامل العودية في لغة الأوامر:
@صدى خارج
استدعاء: المعامل %1
صدى %النتيجة%
مخرج
rem دالة لحساب قيمة العامل
تسجيل الدخول ريم:
rem %1 الرقم الذي تريد حساب المضروب له
إخراج العينية:
rem %RESULT% قيمة عاملية
:مضروب
إذا %1 == 0 (
تعيين النتيجة = 1
خروج /ب
إذا %1 == 1 (
تعيين النتيجة = 1
خروج /ب
تعيين /a PARAM=%1 - 1
استدعاء: عامل٪ PARAM٪
تعيين /a النتيجة=%1 * %RESULT%
خروج /ب
مثال على العمل:
> فاكتوري بات 10
3628800
استخدام قيم الإرجاع
(معالجة رمز خروج البرنامج)
عندما يكمل أي برنامج عمله، فإنه يعيد رمز الإنهاء الخاص به إلى نظام التشغيل. ومن المعتاد إرجاع الصفر عند الانتهاء بنجاح، وإلا فسيتم إرجاع رمز خطأ. في بعض الأحيان، أو في كثير من الأحيان، يقوم أحد البرامج "بشكل متعمد" بإرجاع قيمة غير الصفر بحيث يمكن "معرفة" بعض تفاصيل تشغيله في الملف الدفعي. على سبيل المثال، يقوم البرنامج بإرجاع رمز المفتاح الذي تم الضغط عليه، ويقوم ملف .bat بتنفيذ إجراءات مختلفة بناءً عليه.
كيف يمكن للملف الدفعي معرفة رمز الخروج للبرنامج المنفذ؟ يتم توفير متغير المفتاح ERRORLEVEL لهذا الغرض.
مثال على ملف دفعي به مستويات خطأ:
@صدى خارج
REM قم بتشغيل البرنامج prg1.exe
PRG1.EXE
تحليل رمز إكمال REM
في حالة عدم العثور على مستوى الخطأ 2، انتقل إلى الملف
إذا كان مستوى الخطأ 1، فانتقل إلى خطأ الكتابة
إذا كان مستوى الخطأ 0، فانتقل إلى EXITOK
انتقل إلى Onexit
:لم يتم العثور على الملف
خطأ في الصدى! لم يتم العثور على الملف!
انتقل إلى Onexit
:خطأ الكتابة
خطأ في تسجيل ECHO!
انتقل إلى Onexit
:إكزيتوك
ECHO تم إكمال البرنامج بنجاح.
انتقل إلى Onexit
:ونيكست
يرجى ملاحظة أن تحليل رمز الإنهاء لا يبدأ من الصفر، بل من أقصى قيمة ممكنة. والحقيقة هي أن مثل هذا الفحص يعني: "إذا كان مستوى الخطأ أكبر من أو يساوي القيمة، فعندئذ ...". أي أننا إذا تحققنا بدءًا من الصفر، فإن أي قيمة ستكون صحيحة في السطر الأول، وهذا غير صحيح.
وهذا هو الخطأ الأكثر شيوعا في هذا النوع من البرامج.
في بعض الأحيان يكون من الضروري تشكيل متغير التاريخ والوقتالخامس كمد/باتنصوص شبابيكبالطريقة التي نحتاجها، وليس بالطريقة التي يقدمها لنا نظام التشغيل.
على سبيل المثال، لإضافة هذه البيانات إلى ملف سجل، لتسجيل وقت أو تاريخ حدث ما، قم بإنشاء ملف باسم يجب أن يحتوي على بيانات التاريخ أو الوقت (اليوم، الشهر، السنة، الساعة، الدقائق، الثواني، المللي ثانية. ) أنت لا تعرف أبدا، ما هي مهامنا ... دعونا نستخدم خيالنا :)
في المثال التالي نرى تقسيم المتغيرات حسب الأنماط التي نحتاجها.
ح- الساعة مكونة من رقمين (أي سيتم إعطاء الساعة بالشكل التالي - 01، 02، ...، 09، ... ، 12، ... 24)
م - دقيقة 2 حرف
ق - ثواني 2 علامات
مللي ثانية - رقمين بالمللي ثانية، لسبب ما من 0 إلى 99
dd - علامات اليوم الثاني
مم - شهر 2 حرف
yyyy - السنة 4 أرقام
مثال على استخدام المتغيرات ٪تاريخ٪و ٪وقت٪في البرامج النصية كمد / مضربشبابيك:
@صدى خارج
تعيين h=%TIME:~0.2%
تعيين م =٪ الوقت: ~ 3.2٪
مجموعة s=%TIME:~6.2%
تعيين مللي ثانية =٪ الوقت: ~ 9.2٪
تعيين curtime=%h%:%m%:%s%:%ms%
تعيين dd=%DATE:~0.2%
تعيين مم=%التاريخ:~3.2%
تعيين yyyy=%DATE:~6.4%
تعيين curdate=%dd%-%mm%-%yyyy%
تعيين curdatetime=%curdate% %curtime%
صدى الوقت الحالي هو %curdatetime%
في بعض إصدارات Windows، يختلف تنسيق إصدار التاريخ والوقت، لذلك يمكن أن يعمل هذا البرنامج النصي تمامًا كما نحتاج.
من الناحية النظرية، يمكنك أخذ أجزاء من أي متغيرات بطريقة مماثلة، النقطة المهمة هي أن التنسيق هنا هو كما يلي:
الرقم الأول بعد: ~ هو رقم الحرف الذي نبدأ بأخذ القيمة منه، والرقم الثاني هو عدد الأحرف التي يجب التقاطها.
وبالتالي، اتضح أنه يمكننا أن نأخذ احتياجاتنا أي جزء من أي متغير بيئة Windows متاح لنا.
أعرف المتغيرات التالية التي يمكننا الحصول على قيمها:
ملف تعريف جميع المستخدمين | إرجاع موضع ملف التعريف "جميع المستخدمين". |
معلومات التطبيق | إرجاع الموقع الافتراضي لبيانات التطبيق. |
قرص مضغوط | يحدد مسار المجلد الحالي. مطابق لأمر القرص المضغوط بدون وسيطات. |
كمدكمدلين | الأمر الدقيق المستخدم لبدء cmd.exe الحالي. |
CMDEXTVERSION | إصدار ملحقات معالج الأوامر الحالية. |
ملفات البرنامج المشترك | موقع دليل "الملفات العامة" (عادةً %ProgramFiles%\Common Files) |
اسم الحاسوب | اسم الحاسوب |
كومسبيك | المسار إلى شل قابل للتنفيذ |
تاريخ | إرجاع التاريخ الحالي. يستخدم نفس تنسيق الأمر date /t. تم إنشاؤه بواسطة الأمر Cmd.exe. |
مستوى الخطأ | إرجاع رمز الخطأ لآخر أمر تم استخدامه. تشير القيمة غير الصفرية عادةً إلى وجود خطأ. |
هوم درايف | إرجاع اسم محرك محطة العمل المحلي المرتبط بالدليل الرئيسي للمستخدم. يتم التعيين بناءً على موقع الدليل الرئيسي. يتم تحديد الدليل الرئيسي للمستخدم في الأداة الإضافية "المستخدمون المحليون والمجموعات المحلية". |
هومباث | إرجاع المسار الكامل إلى الدليل الرئيسي للمستخدم. يتم التعيين بناءً على موقع الدليل الرئيسي. يتم تحديد الدليل الرئيسي للمستخدم في الأداة الإضافية "المستخدمون المحليون والمجموعات المحلية". |
مشاركة منزلية | إرجاع مسار الشبكة إلى الدليل الرئيسي المشترك للمستخدم. يتم التعيين بناءً على موقع الدليل الرئيسي. يتم تحديد الدليل الرئيسي للمستخدم في الأداة الإضافية "المستخدمون المحليون والمجموعات المحلية". |
خادم تسجيل الدخول | اسم وحدة تحكم المجال المستخدمة لتخويل المستخدم الحالي |
NUMBER_OF_PROCESSORS | عدد المعالجات في النظام |
نظام التشغيل | اسم نظام التشغيل. يظهر نظاما التشغيل Windows XP وWindows 2000 كـ Windows_NT. |
طريق | يحدد مسار البحث عن الملفات القابلة للتنفيذ. |
باثيكست | إرجاع قائمة بامتدادات الملفات التي تعتبر قابلة للتنفيذ بواسطة نظام التشغيل. |
PROCESSOR_ARCHITECTURE | بنية المعالج |
PROCESSOR_IDENTIFIER | وصف المعالج |
PROCESSOR_LEVEL | رقم طراز المعالج |
PROCESSOR_REVISION | مراجعة المعالج |
ملفات البرنامج | المسار إلى مجلد ملفات البرنامج |
اِسْتَدْعَى | إرجاع خيارات سطر الأوامر للمترجم الحالي. تم إنشاؤه بواسطة الأمر Cmd.exe. |
عشوائي | رقم عشري عشوائي من 0 إلى 32767. تم إنشاؤه بواسطة Cmd.exe |
اسم الجلسة | نوع الجلسة. القيمة الافتراضية هي "وحدة التحكم" |
محرك النظام | القرص الذي يوجد عليه المجلد الجذر لنظام التشغيل Windows |
جذر النظام | مسار مجلد جذر ويندوز |
درجة الحرارة أو TMP | إرجاع المجلدات المؤقتة الافتراضية التي تستخدمها التطبيقات التي يمكن للمستخدمين الذين قاموا بتسجيل الدخول الوصول إليها. تتطلب بعض التطبيقات المتغير TEMP، والبعض الآخر يتطلب المتغير TMP. من المحتمل أن يشير كل من TEMP وTMP إلى أدلة مختلفة، لكن عادةً ما يكونان متماثلين. |
وقت | إرجاع الوقت الحالي. يستخدم نفس تنسيق الأمر time /t. تم إنشاؤه بواسطة الأمر Cmd.exe. |
مجال المستخدم | اسم المجال الذي ينتمي إليه المستخدم الحالي |
اسم المستخدم | اسم المستخدم الحالي |
ملف تعريفي للمستخدم | المسار إلى الملف الشخصي للمستخدم الحالي |
Windir | الدليل الذي تم تثبيت Windows عليه |
   الفريق تعيينيستخدم لعرض وتغيير متغيرات البيئة في سطر أوامر Windows. متغيرات البيئة هي متغيرات تميز قيمها المقبولة البيئة التي يعمل فيها البرنامج الحالي - مسارات ملفات النظام، ومعلومات الأجهزة، وأدلة المستخدم، وما إلى ذلك. يتم إنشاء قيم متغيرات البيئة عند تشغيل Windows أو قيام المستخدم بتسجيل الدخول إلى النظام أو عند تشغيل العمليات الفردية أو استخدام الأمر تعيين. لعرض القيمة التي يفترضها متغير معين، يمكنك استخدام الأمر:
تعيين متغير
اختر الطريق- عرض قيمة المتغير طريق
لإنشاء متغير جديد أو تغيير قيمة متغير موجود، استخدم الأمر:
تعيين متغير = سلسلة
عامل- اسم متغير البيئة.
خط- سلسلة أحرف مخصصة للمتغير المحدد.
SET MyName=Vasya- تعيين قيمة المتغير اسمي
تعيين المسار=C:\progs;%path%- تغيير قيمة المتغير طريقعن طريق الإضافة إلى بداية السطر ج:\البرامج
القيمة المقبولة من قبل المتغير متاحة للمعالجة في ملفات الأوامر باستخدام اسمها المضمن في علامات النسبة المئوية - % . على سبيل المثال، أمر لعرض النص على شاشة ECHO في النموذج:
تاريخ الصدى- سيتم عرض كلمة "التاريخ" والأمر
إيكو %تاريخ%سيتم عرض قيمة المتغير تاريخ، أي. التاريخ الحالي بتنسيق نظام التشغيل.
فريق تعيينيتم استخدام بدون معلمات لعرض القيم الحالية لمتغيرات البيئة.
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\ملفات البرنامج\الملفات المشتركة
اسم الكمبيوتر=TEST7
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
هوم درايف = ج:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
خادم تسجيل الدخول=\\TEST7
NUMBER_OF_PROCESSORS=2
نظام التشغيل=Windows_NT
المسار=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4، GenueIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\ملفات البرنامج
موجه=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
محرك النظام=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData\Local\Temp
TMP=C:\Users\Usr\AppData\Local\Temp
مجال المستخدم=test7
اسم المستخدم=المستخدم
USERPROFILE=C:\Users\Usr
Windir=C:\windows
بالإضافة إلى المتغيرات المعروضة في القائمة عند استدعاء أمر SET، هناك متغيرات أخرى تتغير قيمها ديناميكيًا:
%القرص المضغوط%- يأخذ قيمة الدليل الحالي.
٪تاريخ٪- يأخذ قيمة التاريخ الحالي.
٪وقت٪- يأخذ قيمة الوقت الحالي.
٪عشوائي٪- قيمة الرقم العشوائي في النطاق بين 0 و 32767.
مستوى الخطأ%%- القيمة الحالية لـ ERRORLEVEL، وهو متغير خاص يستخدم كمؤشر لنتيجة تنفيذ البرنامج.
%CMDEXTVERSION%قام CMD.EXE بتوسيع قيمة إصدار معالجة الأمر.
%كمدكمدلين%- يمتد إلى سطر الأوامر الأصلي الذي يسمى Shell.
إذا قمت بتحديد جزء فقط من الاسم عند استدعاء أمر SET، فسيتم عرض قائمة بالمتغيرات التي تبدأ أسماؤها بالسلسلة المحددة. على سبيل المثال:
سيت يو- سيتم عرض قيم كافة المتغيرات التي تبدأ أسماؤها بالحرف "U".
يدعم أمر SET مفتاحين إضافيين:
تعيين / تعبير
تعيين /P متغير =
يحدد رمز التبديل /A أن السلسلة الموجودة على يمين علامة التساوي هي تعبير رقمي يتم تقييم قيمته. محرك التعبير بسيط للغاية ويدعم العمليات التالية، المدرجة بترتيب تنازلي للأولوية:
عند استخدام أي عوامل تشغيل منطقية أو ثنائية، يجب عليك وضع سلسلة التعبير بين علامات اقتباس. يتم التعامل مع أي سلاسل غير رقمية في التعبير كأسماء لمتغيرات البيئة التي يتم تحويل قيمها إلى شكل رقمي قبل الاستخدام. إذا لم يتم تعريف متغير بالاسم المحدد في النظام، فسيتم استبدال قيمة فارغة بدلاً من ذلك. يتيح لك ذلك إجراء عمليات حسابية على قيم متغيرات البيئة دون الحاجة إلى إدخال علامات % للحصول على القيم. إذا تم استدعاء SET /A من سطر الأوامر بدلاً من ملف دفعي، فإنه يطبع القيمة النهائية للتعبير. يجب أن يظهر اسم متغير البيئة على يسار أي مشغل مهمة. يتم التعامل مع القيم الرقمية على أنها عشرية ما لم تكن مسبوقة ببادئة:
0x- للأرقام السداسية العشرية
0
- للأرقام الثمانية.
مثال على استخدام البادئات:
ضبط /A REZ=0xA+012
صدى %REZ%
في هذا الملف الدفعي، قيمة المتغير هي REZيتم حسابه عن طريق إضافة الرقم 10 الممثل بالنظام الست عشري (0xA) والرقم 10 الممثل بالنظام الثماني (012).
يسمح لك رمز التبديل /P بتعيين قيمة متغير لسلسلة الإدخال التي أدخلها المستخدم. يعرض موجه السلسلة المحدد قبل قراءة السلسلة المدخلة. قد يكون موجه موجه السلسلة فارغًا. يتيح لك هذا المفتاح تنظيم حوار مع المستخدم في ملف دفعي:
@صدى خارج
SET /P NAME=أدخل اسم المستخدم:
SET /P pass=أدخل كلمة المرور:
اسم مستخدم ECHO - %NAME%، كلمة المرور - %PASS%
في الملفات الدفعية، غالبًا ما تحتاج إلى العمل مع جزء من القيمة المأخوذة بواسطة متغير، والتي تستخدم لها قيمًا بديلة:
المتغير: السلسلة 1 = السلسلة 2- يستبدل في القيمة المستلمة للمتغير خط 1على خط 2
يستخدم الملف الدفعي التالي حرف النقطة للشرطة في القيمة المتغيرة المقابلة للتاريخ الحالي:
@صدى خارج
تعيين TM=%DATE%
تاريخ الصدى 1 = %tm%
ضبط tm=%التاريخ:.=-%
تاريخ الصدى 2 = %tm%
لتسليط الضوء على جزء من القيمة التي يأخذها المتغير، يتم استخدام البناء التالي:
المتغير:~x,y- أين س- عدد الأحرف التي تم تخطيها من بداية السطر و ذ- عدد الأحرف المستخدمة كقيمة المتغير.
يستخدم المثال التالي عرض الوقت الحالي بدون الثواني وكسور الثواني (أول 5 أحرف فقط من القيمة القياسية لمتغير TIME):
@صدى خارج
تعيين تم=%TIME%
وقت الصدى 1 = %tm%
ضبط tm=%الوقت:~0.5%
وقت الصدى 2 = %tm%
إذا كانت القيمة ذ(الطول) غير محدد، فتستخدم قيمة المتغير المتبقي حتى نهاية السطر. إذا كانت القيمة ذسالبة، ثم يتم استخدام جزء من سلسلة القيمة المتغيرة من النهاية. يمكن تعديل المثال السابق ليحدد أن قيمة الوقت المستلمة يتم تجريدها 6 أحرف من النهاية:
@صدى خارج
تعيين تم=%TIME%
وقت الصدى 1 = %tm%
ضبط tm=%الوقت:~0.-6%
وقت الصدى 2 = %tm%
من الممكن استخدام عدد الفجوات غير محدد، ويتم استخدام رقم سالب، وستكون القيمة المستلمة جزءًا من المتغير من نهاية السطر:
المسار %:~-10%- سيتم استخراج آخر 10 أحرف من متغير PATH
يمكنك حذف القيمة الخالية مع الحفاظ على تنسيق الاستبدال:
المسار %:~0.-2%مقابل المسار %:~,-2%
عند استخدام متغيرات البيئة في ملفات الأوامر، هناك قيود معينة مرتبطة بحقيقة أن القيمة المخصصة تظل دون تغيير عند تعديلها ضمن مجموعة أوامر محددة بين قوسين، على سبيل المثال في الأوامر لوأو ل. لتجاوز هذا القيد، قم بتشغيل معالج الأوامر باستخدام المعلمة /V:ON واستخدم علامات التعجب بدلاً من علامات النسبة المئوية للحصول على القيمة المقبولة بواسطة المتغير. بالإضافة إلى ذلك، من الممكن استخدام التشغيل القياسي لمعالج الأوامر، ولكن مع التنشيط المحلي لهذا الوضع باستخدام الأمر:
يظهر الاختلاف في نتائج استخدام القيم المتغيرة بشكل واضح من خلال الملف الدفعي التالي:
@صدى خارج
تعيين VAR = قبل
إذا كان "%VAR%" == "قبل" (
تعيين VAR = بعد
إذا كان "!VAR!" == "بعد"echo مع علامة النسبة المئوية=%VAR%، مع علامة الاستفهام=!VAR!
فريق تعيين VAR = بعديتم تنفيذه داخل روتين فرعي محدد بين قوسين، وإذا تمت إزالة الأمر Setlocal EnableDelayedExpansionأو لا تستخدم للحصول على قيمة المتغير حكم الفيديو المساعدعلامات التعجب، ستبقى قيمتها هي القديمة (ما تم ضبطه قبل الدخول إلى الروتين الفرعي). تحدث مشكلة مشابهة عندما يتم تغيير قيمة متغير داخل حلقة الأوامر. ل. على سبيل المثال، للحصول على قائمة بالملفات الموجودة في الدليل الحالي، لن يعمل ملف دفعي مثل هذا:
قائمة المجموعة=
بالنسبة لـ %%i في (*) قم بتعيين LIST=%LIST% %%i
صدى %LIST%
قيمة متغيرة قائمةلن يتم تغييرها داخل الحلقة. ولكي يحدث ذلك، يجب تعديل الملف الدفعي على النحو التالي:
Setlocal EnableDelayedExpansion
قائمة المجموعة=
بالنسبة لـ %%i في (*) قم بتعيين LIST=!LIST! ٪٪أنا
صدى %LIST%
والآن قيمة المتغير قائمةداخل حلقة لسوف تتغير، مع الأخذ بالتتابع قيم أسماء الملفات مفصولة بمسافات ( تعيين القائمة=!القائمة! ٪٪أنا)