এমন পদ্ধতি রয়েছে যা ^
পালানোর ক্রম এড়ায়।
আপনি বিলম্বিত প্রসার সহ ভেরিয়েবলগুলি ব্যবহার করতে পারেন। নীচে একটি ছোট ব্যাচের স্ক্রিপ্ট প্রদর্শন রয়েছে
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
echo !line!
অথবা আপনি একটি ফর / এফ লুপ ব্যবহার করতে পারেন। কমান্ড লাইন থেকে:
for /f "delims=" %A in ("<html>") do @echo %~A
বা ব্যাচের স্ক্রিপ্ট থেকে:
@echo off
for /f "delims=" %%A in ("<html>") do echo %%~A
কারণ এই পদ্ধতি কাজ কারণ উভয় বিলম্বিত সম্প্রসারণ এবং পরিবর্তনশীল বিস্তৃতির জন্য ঘটতে পরে বিশেষ অপারেটার মত <
, >
, &
, |
, &&
, ||
পার্স করা হয়। দেখুন উইন্ডোজ কমান্ড ইন্টারপ্রেটার (সিএমডি.এক্সই) কীভাবে স্ক্রিপ্টগুলি পার্স করে? আরও তথ্যের জন্য.
sin3.14 উল্লেখ করেছে যে পাইপগুলিতে একাধিক পলায়নের প্রয়োজন হতে পারে । উদাহরণ স্বরূপ:
echo ^^^<html^^^>|findstr .
পাইপগুলিকে একাধিক পলায়নের প্রয়োজন হওয়ার কারণ হ'ল পাইপের প্রতিটি পাশই একটি নতুন সিএমডি প্রসেসে কার্যকর করা হয়, তাই লাইনটি একাধিকবার পার্স করা হয়। দেখুন কেন বিলম্বিত সম্প্রসারণ ব্যর্থ যখন কোডের পাইপ ব্লক ভিতরে? উইন্ডোর পাইপ প্রয়োগের অনেকগুলি বিশ্রী পরিণতির ব্যাখ্যার জন্য।
পাইপ ব্যবহার করার সময় একাধিক পলায়ন এড়াতে অন্য পদ্ধতি রয়েছে is আপনি স্পষ্টভাবে নিজের সিএমডি প্রক্রিয়াটি ইনস্ট্যান্ট করতে পারেন এবং উদ্ধৃতি সহ একক পালাবার রক্ষা করতে পারেন:
cmd /c "echo ^<html^>"|findstr .
যদি আপনি পালিয়ে যাওয়া এড়াতে বিলম্বিত সম্প্রসারণ কৌশলটি ব্যবহার করতে চান, তবে আরও বিস্ময় রয়েছে (আপনি যদি সিএমডি.এক্সই এর ডিজাইনের বিশেষজ্ঞ হন তবে আপনি অবাক হবেন না, তবে কোনও সরকারী মাইক্রোসফ্ট ডকুমেন্টেশন নেই যা এই স্টাফটি ব্যাখ্যা করে)
মনে রাখবেন যে পাইপের প্রতিটি পাশই তার নিজস্ব সিএমডি.এক্সই প্রক্রিয়াতে কার্যকর করা হয়, তবে প্রক্রিয়াটি বিলম্বিত সম্প্রসারণের রাজ্যের উত্তরাধিকারী হয় না - এটি বন্ধে ডিফল্ট হয়। সুতরাং আপনাকে অবশ্যই নিজের সিএমডি.এক্সই প্রক্রিয়াটি স্পষ্টভাবে ইনস্ট্যান্ট করতে হবে এবং বিলম্বিত প্রসারণ সক্ষম করার জন্য / ভি: অন বিকল্পটি ব্যবহার করতে হবে।
@echo off
setlocal disableDelayedExpansion
set "line=<html>"
cmd /v:on /c echo !test!|findstr .
নোট করুন যে বিলম্বিত প্রসারণ প্যারেন্ট ব্যাচের স্ক্রিপ্টে বন্ধ রয়েছে।
তবে দেরীদারি প্রসারণটি মূল স্ক্রিপ্টে সক্ষম করা থাকলে সমস্ত নরক আলগা হয়ে যায়। নিম্নলিখিতগুলি কাজ করে না :
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
REM - the following command fails
cmd /v:on /c echo !test!|findstr .
সমস্যাটি !test!
মূল স্ক্রিপ্টে প্রসারিত, সুতরাং নতুন সিএমডি প্রক্রিয়াটি অরক্ষিত <
এবং পার্স করার চেষ্টা করছে >
।
আপনি পালাতে পারেন !
, তবে এটি জটিল হয়ে উঠতে পারে , কারণ এটি !
উদ্ধৃত হয়েছে কিনা তা নির্ভর করে ।
যদি উদ্ধৃতি না দেওয়া হয়, তবে ডাবল পলায়ন প্রয়োজন:
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
cmd /v:on /c echo ^^!test^^!|findstr .
যদি উদ্ধৃতি দেওয়া হয়, তবে একটি একক পালাতে ব্যবহৃত হবে:
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
cmd /v:on /c "echo ^!test^!"|findstr .
তবে একটি আশ্চর্যজনক কৌশল আছে যা সমস্ত পালিয়ে যাওয়া এড়িয়ে চলে - পাইপের বাম দিকটি বদ্ধ করা পিতামহ স্ক্রিপ্টকে !test!
অকাল বর্ধিত হতে বাধা দেয় :
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
(cmd /v:on /c echo !test!)|findstr .
তবে আমি মনে করি এটি এমনকি নিখরচায় দুপুরের খাবার নয়, কারণ যখন প্রথম বন্ধনী ব্যবহার করা হয় তখন ব্যাচ পার্সার শেষে একটি অতিরিক্ত (সম্ভবত অযাচিত) স্থান প্রবর্তন করে।
আইন্ট ব্যাচের স্ক্রিপ্টিং মজা ;-)