it-swarm.asia

إنشاء قائمة أو صفائف في Windows Batch

هل يمكنني إعلان قائمة أو صفيف في ملف دفعي مثل هذا:

set list = "A B C D"

ثم أحتاج إلى كتابة هذه الملفات في ملف ، مع وجود مسافات بين:

A

B

C 

D
57
user2533789

نعم ، يمكنك استخدام كلا الاتجاهين. إذا كنت ترغب فقط في فصل العناصر وإظهارها في سطور منفصلة ، فإن القائمة تكون أبسط:

set list=A B C D

يمكن معالجة قائمة القيم المفصولة بمسافة بسهولة بواسطة أمر for:

(for %%a in (%list%) do (
   echo %%a
   echo/
)) > theFile.txt

يمكنك أيضًا إنشاء صفيف بهذه الطريقة:

setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D) do (
   set vector[!n!]=%%a
   set /A n+=1
)

وإظهار عناصر الصفيف بهذه الطريقة:

(for /L %%i in (0,1,3) do (
   echo !vector[%%i]!
   echo/
)) > theFile.txt

لمزيد من التفاصيل حول إدارة الصفيف في ملفات الدُفعات ، راجع: المصفوفات والقوائم المرتبطة وهياكل البيانات الأخرى في البرنامج النصي cmd.exe (الدُفعة)

انتباه! يجب أن تعلم أن جميع الأحرف المضمنة في أمر set مدرجة في اسم المتغير (على يسار علامة المساواة) ، أو في قيمة المتغير. على سبيل المثال ، هذا الأمر:

set list = "A B C D"

إنشاء متغير يسمى list (قائمة مساحة) بالقيمة "A B C D" (مسافة ، اقتباس ، A ، إلخ). لهذا السبب ، من المستحسن عدم إدراج مسافات في أوامر set أبدًا. إذا كنت بحاجة إلى تضمين القيمة في علامات اقتباس ، يجب عليك إحاطة كل من اسم المتغير وقيمته:

set "list=A B C D"

ملاحظة: يجب ألا تستخدم ECHO. من أجل ترك أسطر فارغة! البديل هو ECHO/. لمزيد من التفاصيل حول هذه النقطة ، راجع: http://www.dostips.com/forum/viewtopic.php؟f=3&t=774

97
Aacini
@echo off
setlocal
set "list=a b c d"
(
 for %%i in (%list%) do (
  echo(%%i
  echo(
 )
)>file.txt

لا تحتاج - في الواقع ، لا يمكن "إعلان" المتغيرات دفعة واحدة. يؤدي تعيين قيمة إلى متغير إلى إنشائها ، وتعيين سلسلة فارغة يحذفها. أي اسم متغير لا يحتوي على قيمة محددة له قيمة سلسلة فارغة. جميع المتغيرات هي سلاسل - دون استثناء. هناك عمليات تظهر أنها تؤدي وظائف رياضية (عدد صحيح) ، لكنها تعمل عن طريق تحويل جيئة وذهابا من السلاسل.

تعتبر الدفعة حساسة للمسافات في أسماء المتغيرات ، لذا فإن مهمتك كما تم نشرها ستعين السلسلة "A B C D" - بما في ذلك علامات الاقتباس ، إلى المتغير "list " - لا يشمل علامات الاقتباس ، ولكن بما في ذلك المساحة. يتم استخدام بناء الجملة set "var=string" لتعيين القيمة string إلى var بينما سيقوم set var=string بعمل نفس الشيء. تقريبيا. في الحالة الأولى ، يتم استبعاد أي مسافات زائدة شاردة بعد عرض الأسعار من القيمة المعينة ، في الحالة الثانية ، يتم تضمينها. يصعب رؤية المساحات عند طباعتها.

ECHO يردد السلاسل. بشكل كلاسيكي ، يتبعه مسافة - أحد الفواصل الافتراضية المستخدمة بواسطة الدُفعات (الآخرون هم TAB و COMMA و SEMICOLON - أي من هذه الأشياء يفعل ذلك تمامًا ، لكن يتم تحويل TABS إلى غالبًا ما يكون محررا للفضاء بواسطة محرري النصوص و نما البعض الآخر على مر السنين.) تم العثور على شخصيات أخرى تتبع O في ECHO لتفعل بالضبط ما يجب أن يفعله SPACE الموثق. النقطة شائعة. من المحتمل أن تكون الأقواس المفتوحة ( هي الأكثر فائدة منذ الأمر

ECHO.%emptyvalue%

سوف ينتج تقرير عن حالة ECHO (ECHO is on/off) في حين

ECHO(%emptyvalue%

سوف تنتج خط فارغ.

المشكلة في ECHO( هي أن النتيجة "تبدو" غير متوازنة.

13
Magoo

في بعض الأحيان قد يكون عنصر الصفيف طويلًا جدًا ، في ذلك الوقت يمكنك إنشاء صفيف بهذه الطريقة:

set list=a
set list=%list%;b 
set list=%list%;c 
set list=%list%;d

ثم أظهرها:

@echo off
for %%a in (%list%) do ( 
 echo %%a
 echo/
)
9
John Zhu