batch file - دفعة: السيارات الهروب الأحرف الخاصة




batch-file cmd (2)

حسنا، ليست هناك حاجة للهروب مشغلي إعادة التوجيه والأحرف الخاصة الأخرى المدرجة في الفقرة الأخيرة في مساعدة الانتاج عن طريق تشغيل cmd /? في نافذة موجه الأوامر على صفحة المساعدة الأخيرة عند تضمين السلسلة المخرجات في علامات اقتباس مزدوجة.

ولكن باستخدام " على الخط مع إيكو يؤدي الأمر في وجود أيضا إخراج الاقتباس مزدوجة.

هناك العديد من الحلول.

الأول هو تعيين السلسلة إلى الإخراج إلى متغير البيئة وإخراج قيمة متغير البيئة باستخدام التوسع المتأخر.

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Line=pipe = | and percent sign = %% and exclamation mark ^!"
echo !Line!
set "Line=redirection operators: < and > and >>"
echo !Line!
endlocal

أو أقصر قليلا، ولكن ليست جيدة جدا للقراءة:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Line=pipe = | and percent sign = %% and exclamation mark ^!" & echo !Line!
set "Line=redirection operators: < and > and >>" & echo !Line!
endlocal

ملاحظة: % و ! يجب أن يكون مع ذلك هرب مع % أخرى و مع ^ أن تفسر على أنها حرف حرفي في سلسلة تعيين إلى Line متغير البيئة.

حل آخر باستخدام PrintLine :

@echo off
setlocal EnableExtensions DisableDelayedExpansion
call :PrintLine "pipe = | and percent sign = %%%% and exclamation mark !"
call :PrintLine "redirection operators: < and > and >>"
endlocal
goto :EOF

:PrintLine
set "Line=%~1"
setlocal EnableDelayedExpansion
echo !Line!
endlocal
goto :EOF

عيوب هذا الحل هي:

  1. يجب تحديد علامة النسبة المئوية مع علامات 4 في المئة أن تطبع أخيرا حرفيا حرفيا.
  2. وهو أبطأ بسبب استخدام سيتلوكال و إندلوكال على طباعة كل سطر.

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

حل واحد آخر وفقا للتعليق من قبل جوزيفز يستخدم الأمر فور للتوسع المتأخر الضمني :

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for %%I in (
    "pipe = | and percent sign = %% and exclamation mark !",
    "redirection operators: < and > and >>"
) do echo %%~I
endlocal

يتم تحديد خطوط للإخراج في قائمة مفصولة بفواصل من سلاسل نقلت مزدوجة لكونها معالجتها بواسطة فور .

لديها ميزة كبيرة أن مجرد علامة النسبة المئوية يجب أن يكون هرب مع علامة مئوية إضافية على تأخير تأخير تعطيل. ولكن السلسلة إلى الإخراج لا يمكن أن تحتوي على اقتباس مزدوج مع استثناء "" ضمن السلسلة.

شكرا جوزيفز لهذه المساهمة.

يتم توفير حلول كبيرة أخرى من قبل جيب في جوابه.

بقدر ما أعرف، أنا بحاجة للهروب من كل شخصيات الهروب عندما يردد لهم. طريقة ^ يعمل بشكل جيد لعدد قليل echo إس. (الذي ينبغي أن يكون شيئا مثل :)

@echo ^|
@echo ^> ^>^>

ومع ذلك، عندما يكون هناك الكثير من الشخصيات للهروب، لن تعمل الطريقة ^ بعد الآن. لذا، سؤالي هو:

هل هناك أي طرق الهروب جميع الأحرف الخاصة دون "البريد المزعج" كاريت؟


كما ذكر موفي، يمكنك استخدام المتغيرات مع التوسع المتأخر لتردد أي محتوى.

هناك بعض الطرق الممكنة.

1) يقتبس الاختفاء

for /F %%^" in ("""") do (
  echo %%~"Hello^you
  echo %%~"Line2 |&<>
)

هذا يعمل كما %~" سوف أقتبس بقية الخط، ولكن بعد التوسع سوف تختفي

2) عندما تريد أن تكرر خطوط متعددة يجب أن تقرأ عن مختلف أشكال هريدوك

3) ماجيكشو يمكن عرض أي محتوى دون الهروب أو مضاعفة علامات النسبة المئوية مثل

%magicEcho% "^!%path%<>" ^%!%<> ^




special-characters