windows - شرح - اوامر ملفات bat




كيف يمكنني تحميل محتويات ملف نصي إلى متغير ملف دفعي؟ (4)

إذا كان الأمر set الخاص بك يدعم التبديل / p ، يمكنك إدخال توجيه الإخراج بهذه الطريقة.

set /p VAR1=<test.txt

جلس /؟ | العثور على "/ P"

يسمح لك رمز التبديل / P بتعيين قيمة متغير إلى سطر إدخال تم إدخاله من قبل المستخدم. يعرض سطر المطالبة المحدد قبل قراءة سطر الإدخال. يمكن أن يكون promptString فارغ.

هذا له فائدة إضافية من العمل لأنواع الملفات غير المسجلة (التي لا تقبلها الإجابة المقبولة).

أحتاج إلى أن أكون قادراً على تحميل المحتويات الكاملة لملف نصي وتحميلها إلى متغير لمزيد من المعالجة.

كيف أقوم بذلك؟

إليكم ما فعلته بفضل رد Odaisky الروماني.

SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i

echo %content%
EndLocal

إنشاء ملف يسمى "SetFile.bat" يحتوي على السطر التالي مع لم حرف إرجاع في نهاية ...

set FileContents=

ثم في ملف دفعي الخاص بك القيام بشيء مثل هذا ...

   @echo off
   copy SetFile.bat + %1 $tmp$.bat > nul
   call $tmp$.bat
   del $tmp$.bat

٪ 1 هو اسم ملف الإدخال الخاص بك وسوف يحتوي٪ FileContents٪ على محتويات ملف الإدخال بعد المكالمة. هذا سيعمل فقط على ملف سطر واحد على الرغم من (أي ملف يحتوي على أي حرف إرجاع). يمكنك تجريد / استبدال أحرف الإرجاع من الملف قبل استدعاء٪ tmp٪ .bat عند الحاجة.


يمكنك استخدام:

set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i

يمكنك تحديد مزيد من المعالجة؟

يمكنك استخدام حلقة for للقيام بهذا الأمر تقريبًا ، ولكن لا توجد طريقة سهلة لإدراج CR / LF في متغير بيئة ، لذلك سيكون لديك كل شيء في سطر واحد. (قد تكون قادرًا على حل هذه المشكلة اعتمادًا على ما تحتاج إلى القيام به).

تقتصر أيضًا على أقل من حوالي 8 كيلو من الملفات النصية بهذه الطريقة. (لا يمكنك إنشاء env مفرد var أكبر من حوالي 8 كيلو بايت.)

اقتراح بيل للحلقة هو على الأرجح ما تحتاجه. تقوم بمعالجة الملف سطر واحد في كل مرة:

(استخدم %i في سطر الأوامر %%i في ملف دفعي)

for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i

أكثر تطورا:

for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
goto :fin

:part2
echo %1
::do further processing here
goto :eof

:fin




cmd