আমরা ব্যাচের স্ক্রিপ্টগুলির ব্যাকরণ তদন্ত করতে পরীক্ষা-নিরীক্ষা করেছি। আমরা ব্যাচ এবং কমান্ড লাইন মোডের মধ্যে পার্থক্যও তদন্ত করেছি।
ব্যাচ লাইন পার্সার:
এখানে ব্যাচ ফাইল লাইন পার্সারের পর্যায়গুলির সংক্ষিপ্ত বিবরণ দেওয়া হল:
পর্ব 0) লাইন পড়ুন:
পর্ব 1) শতাংশ সম্প্রসারণ:
দ্বিতীয় পর্যায়) বিশেষ অক্ষরগুলি প্রক্রিয়াকরণ করুন, টোকেনাইজ করুন এবং ক্যাশেড কমান্ড ব্লক তৈরি করুন: এটি একটি জটিল প্রক্রিয়া যা উদ্ধৃতি, বিশেষ অক্ষর, টোকেন ডিলিমিটার এবং ক্যারেট পলায়নের মতো জিনিস দ্বারা প্রভাবিত হয়।
ধাপ 3) পার্সড কমান্ড (গুলি) কেবলমাত্র কমান্ড ব্লক দিয়ে শুরু না @
হলে পূর্ববর্তী পদক্ষেপের শুরুতে ECHO চালু ছিল E
চতুর্থ পর্যায়) %X
পরিবর্তনশীল প্রসারণের জন্য: কেবলমাত্র একটি ফর কমান্ড সক্রিয় থাকলে এবং ডিও-র পরে কমান্ডগুলি প্রক্রিয়াজাত হয়।
পর্ব 5) বিলম্বিত সম্প্রসারণ: কেবলমাত্র বিলম্বিত প্রসারণ সক্ষম করা থাকলে
ফেজ 5.3) পাইপ প্রসেসিং: কেবলমাত্র পাইপের উভয় পাশে কমান্ডগুলি থাকলে
পর্যায় 5.5) পুনর্নির্দেশ কার্যকর করুন:
পর্যায় 6) কল প্রক্রিয়াকরণ / ক্যারেট দ্বিগুণকরণ: কমান্ড টোকেনটি যদি কল হয় তবেই
ফেজ 7) এক্সিকিউট: কমান্ডটি কার্যকর করা হয়
প্রতিটি পর্যায়ের বিশদ এখানে:
নোট করুন যে নীচে বর্ণিত পর্যায়গুলি ব্যাচ পার্সার কীভাবে কাজ করে তার একমাত্র মডেল। প্রকৃত সেন্টিমিডি.এক্সই ইন্টার্নালগুলি এই পর্যায়গুলি প্রতিফলিত করতে পারে না। তবে এই মডেলটি ব্যাচের স্ক্রিপ্টগুলির আচরণের পূর্বাভাস দেওয়ার ক্ষেত্রে কার্যকর।
পর্ব 0) লাইন পড়ুন: প্রথমে ইনপুট পড়ুন <LF>
।
- কমান্ড হিসাবে পার্স করার জন্য একটি লাইন পড়ার সময়
<Ctrl-Z>
(0x1A) <LF>
(লাইনফিড 0x0A) হিসাবে পড়া হয়
- যখন GOTO বা CALL লাইনগুলি যখন স্ক্যান করার সময় পড়বে: লেবেলটিকে,
<Ctrl-Z>
নিজেকে হিসাবে ধরা হয় - তখন রূপান্তরিত হয় না<LF>
পর্ব 1) শতাংশ সম্প্রসারণ:
- একটি ডাবল
%%
একটি একক দ্বারা প্রতিস্থাপিত হয়%
- আর্গুমেন্ট সম্প্রসারণ (
%*
, %1
, %2
, ইত্যাদি)
- এর প্রসারণ
%var%
, যদি var না থাকে তবে এটিকে কিছুই দিয়ে প্রতিস্থাপন করুন
- লাইনটি প্রথমে ছড়িয়ে দেওয়া হয় প্রসারণের
<LF>
মধ্যে নয়%var%
- সম্পূর্ণ ব্যাখ্যার জন্য ডাবেনহাম একই থ্রেড থেকে এর প্রথমার্ধটি পড়ুন : পার্সেন্ট ফেজ
দ্বিতীয় পর্যায়) বিশেষ অক্ষরগুলি প্রক্রিয়াকরণ করুন, টোকেনাইজ করুন এবং ক্যাশেড কমান্ড ব্লক তৈরি করুন: এটি একটি জটিল প্রক্রিয়া যা উদ্ধৃতি, বিশেষ অক্ষর, টোকেন ডিলিমিটার এবং ক্যারেট পলায়নের মতো জিনিস দ্বারা প্রভাবিত হয়। নিম্নলিখিতটি এই প্রক্রিয়াটির একটি আনুমানিক is
এই ধাপ জুড়ে রয়েছে এমন ধারণাগুলি গুরুত্বপূর্ণ।
- একটি টোকেন কেবল অক্ষরের একটি স্ট্রিং যা ইউনিট হিসাবে বিবেচিত হয়।
- টোকেনগুলি টোকেন ডিলিমিটারদের দ্বারা পৃথক করা হয়। স্ট্যান্ডার্ড টোকেন ডিলিমিটারগুলি
<space>
<tab>
;
,
=
<0x0B>
<0x0C>
এবং <0xFF>
ক্রমাগত টোকেন ডিলিমিটারকে এক হিসাবে বিবেচনা করা হয় - টোকেন ডিলিমিটারগুলির মধ্যে কোনও খালি টোকেন নেই
- উদ্ধৃত স্ট্রিংয়ের মধ্যে কোনও টোকেন ডিলিমিটার নেই। সম্পূর্ণ উদ্ধৃত স্ট্রিংটি সর্বদা একক টোকেনের অংশ হিসাবে বিবেচিত হয়। একটি একক টোকনে উদ্ধৃত স্ট্রিং এবং অব্যক্ত অক্ষরের সংমিশ্রণ থাকতে পারে।
নীচের অক্ষরগুলির প্রসঙ্গের উপর নির্ভর করে এই পর্যায়ে বিশেষ অর্থ হতে পারে: <CR>
^
(
@
&
|
<
>
<LF>
<space>
<tab>
;
,
=
<0x0B>
<0x0C>
<0xFF>
বাম থেকে ডানে প্রতিটি চরিত্রটি দেখুন:
- তবে
<CR>
যদি এটি মুছে ফেলুন, যেন এটি কখনও ছিল না (অদ্ভুত পুনঃনির্দেশ আচরণ ব্যতীত )
- যদি একটি ক্যারেট (
^
) হয়, তবে পরবর্তী অক্ষরটি পালিয়ে যায় এবং পালানোর ক্যারেটটি সরিয়ে ফেলা হয়। পালানো অক্ষরগুলি সমস্ত বিশেষ অর্থ (বাদে <LF>
) হারায় ।
- যদি একটি উদ্ধৃতি (
"
) হয়, উদ্ধৃতি পতাকা টগল করুন। যদি উদ্ধৃতি পতাকাটি সক্রিয় থাকে তবে কেবলমাত্র "
এবং <LF>
বিশেষ। পরবর্তী উক্তিটি উদ্ধৃতি পতাকাটি টগল না করা পর্যন্ত অন্যান্য সমস্ত অক্ষর তাদের বিশেষ অর্থ হারাবে। সমাপনী উদ্ধৃতিটি এড়ানো সম্ভব নয়। সমস্ত উদ্ধৃত অক্ষর সর্বদা একই টোকেনের মধ্যে থাকে।
<LF>
সর্বদা উদ্ধৃতি পতাকাটি বন্ধ করে দেয়। অন্যান্য আচরণ প্রসঙ্গের উপর নির্ভর করে পরিবর্তিত হয়, কিন্তু উদ্ধৃতিগুলি কখনই এর আচরণকে পরিবর্তন করে না <LF>
।
- পলান
<LF>
<LF>
ছিনিয়ে নেওয়া হয়
- পরের চরিত্রটি পালিয়ে যায়। যদি লাইন বাফার শেষে থাকে, তবে পরের লাইনটি 1 এবং 1.5 পর্যায়ক্রমে পড়া এবং প্রক্রিয়াজাত করা হবে এবং পরবর্তী অক্ষরটি থেকে বেরিয়ে যাওয়ার আগে বর্তমানের সাথে যুক্ত করা হবে। যদি পরবর্তী চরিত্রটি হয়
<LF>
, তবে এটি আক্ষরিক হিসাবে বিবেচিত হবে, যার অর্থ এই প্রক্রিয়াটি পুনরাবৃত্তিযোগ্য নয়।
- আনুষঙ্গিকভাবে
<LF>
বন্ধনীর মধ্যে নেই
<LF>
কেটে ফেলা হয় এবং বর্তমান লাইনের পার্সিং সমাপ্ত হয়।
- লাইন বাফারে থাকা কোনও অক্ষর সহজভাবে উপেক্ষা করা হয়।
<LF>
একটি ফর ইন প্যারেন্থাইজড ব্লকের মধ্যে
আনসকেপড
<LF>
এ রূপান্তরিত হয় a <space>
- যদি লাইন বাফার শেষে থাকে, তবে পরের লাইনটি পড়তে হবে এবং বর্তমানের সাথে সংযুক্ত করা হবে।
- প্রথম
<LF>
বন্ধনীযুক্ত কমান্ড ব্লকের মধ্যে
আনসকেপড
<LF>
রূপান্তরিত হয় <LF><space>
, এবং <space>
কমান্ড ব্লকের পরবর্তী লাইনের অংশ হিসাবে বিবেচিত হয়।
- যদি লাইন বাফার শেষে থাকে, তবে পরের লাইনটি পড়তে এবং স্পেসে সংযুক্ত করা হয়।
- যদি বিশেষ চরিত্রগুলির মধ্যে একটি
&
|
<
বা >
, পাইপ, কমান্ড কনকেন্টেশন এবং পুনঃনির্দেশ পরিচালনা করতে এই বিন্দুতে লাইনটি বিভক্ত করুন।
- পাইপ (
|
) এর ক্ষেত্রে , প্রতিটি পক্ষই একটি পৃথক কমান্ড (বা কমান্ড ব্লক) যা 5 ম পর্যায়ে বিশেষ পরিচালনা করে
- ক্ষেত্রে
&
, &&
অথবা ||
কমান্ড সংযুক্তকরণের, সংযুক্তকরণের প্রতিটি পাশ আলাদা কমান্ড হিসাবে গণ্য হবে।
- ক্ষেত্রে
<
, <<
, >
, অথবা >>
ফেরৎ, ফেরৎ দফা পার্স করা হয়, সাময়িকভাবে সরানো, এবং তারপর বর্তমান কমান্ড শেষে যোগ করা। একটি পুনঃনির্দেশের ধারাটিতে একটি alচ্ছিক ফাইল হ্যান্ডেল ডিজিট, পুনর্নির্দেশ অপারেটর এবং পুনঃনির্দেশ গন্তব্য টোকন থাকে।
- পুনঃনির্দেশ অপারেটরের পূর্ববর্তী টোকেনটি যদি একটি একক অচিহ্নযুক্ত অঙ্ক হয়, তবে অঙ্কটি পুনঃনির্দেশিত হওয়ার জন্য ফাইল হ্যান্ডেলটি নির্দিষ্ট করে। যদি হ্যান্ডেল টোকেনটি খুঁজে পাওয়া যায় না, তবে আউটপুট পুনর্নির্দেশটিকে ডিফল্ট 1 (স্টাডআউট), এবং ইনপুট পুনর্নির্দেশকে ডিফল্ট 0 (স্টিডিন) করতে হবে।
- যদি এই কমান্ডের (প্রথম দিকে পুনর্নির্দেশের আগে যাওয়ার আগে) প্রথম চিহ্নটি শুরু হয়
@
, তবে @
এর বিশেষ অর্থ রয়েছে has ( @
অন্য কোনও প্রসঙ্গে বিশেষ নয়)
- বিশেষ
@
সরানো হয়।
- যদি ECHO চালু থাকে, তবে এই কমান্ডটি এই রেখার উপরের কোনও নিম্নোক্ত কমান্ডের সাথে পর্ব 3 প্রতিধ্বনির বাইরে থাকবে। যদি এটি
@
একটি খোলার আগে হয় (
, তবে পুরো বন্ধনীবদ্ধ ব্লকটি 3 ম এর প্রতিধ্বনি থেকে বাদ দেওয়া হবে।
- প্রক্রিয়া বন্ধনী (একাধিক লাইন জুড়ে যৌগিক বিবৃতি প্রদান করে):
- পার্সার যদি কমান্ড টোকেনটির সন্ধান
(
না করে তবে বিশেষ নয়।
- পার্সার যদি কোনও কমান্ড টোকেন সন্ধান করে এবং এটি সন্ধান করে
(
তবে একটি নতুন যৌগিক বিবৃতি শুরু করুন এবং প্রথম বন্ধনী কাউন্টারটি বাড়ান
- যদি প্রথম বন্ধনী> 0 হয় তবে
)
যৌগিক স্টেটমেন্টটি বন্ধ করে দেয় এবং প্রথম বন্ধনী কাউন্টারকে হ্রাস করে।
- যদি রেখার শেষটি পৌঁছে যায় এবং প্রথম বন্ধনী> 0 হয় তবে পরবর্তী লাইনটি যৌগিক বিবৃতিতে সংযুক্ত করা হবে (পর্ব 0 দিয়ে আবার শুরু হবে)
- যদি প্রথম বন্ধনী কাউন্টার 0 হয় এবং পার্সার একটি কমান্ড সন্ধান করছে, তবে যতক্ষণ না তা অবিলম্বে টোকেন ডিলিমিটার, বিশেষ অক্ষর, নিউলাইন বা ফাইল-এর-শেষের পরে অনুসরণ করা হবে ততক্ষণ
)
একটি REM
বিবৃতিটির অনুরূপ কাজ করবে
- সমস্ত বিশেষ অক্ষরগুলি বাদ দিয়ে তার অর্থ হারাবে
^
(লাইন সংক্ষিপ্তকরণ সম্ভব)
- লজিকাল লাইনের শেষে পৌঁছে গেলে পুরো "কমান্ড" ফেলে দেওয়া হয়।
- প্রতিটি কমান্ড টোকেনের একটি সিরিজে বিভক্ত হয়। প্রথম টোকেনটি সর্বদা কমান্ড টোকেন হিসাবে বিবেচিত হয় (বিশেষের পরে কেটে ফেলা
@
হয় এবং শেষে পুনঃনির্দেশ) সরানো হয়।
- কমান্ড টোকেনের আগে শীর্ষস্থানীয় টোকেন ডিলিমিটারগুলি কেটে নেওয়া হয়
- কমান্ড টোকেনকে বিশ্লেষণ
(
করার সময়, মানক টোকেন ডিলিমিটারগুলি ছাড়াও কমান্ড টোকেন ডিলিমিটার হিসাবে কাজ করে
- পরবর্তী টোকেন পরিচালনা করা কমান্ডের উপর নির্ভর করে।
- কমান্ড টোকেনের পরে একক আর্গুমেন্ট টোকেন দেওয়ার পরে সর্বাধিক কমান্ডগুলি সমস্ত আর্গুমেন্টকে সহজেই যুক্ত করে। সমস্ত আর্গুমেন্ট টোকেন ডিলিমিটারগুলি সংরক্ষিত। আর্গুমেন্ট অপশনগুলি সাধারণত ফেজ 7 পর্যন্ত পার্স করা হয় না।
- তিনটি কমান্ড বিশেষ হ্যান্ডলিং পান - যদি, ফর, এবং আরইএম
- আইএফ দুটি বা তিনটি পৃথক অংশে বিভক্ত হয়ে থাকে যা স্বাধীনভাবে প্রক্রিয়া করা হয়। আইএফ নির্মাণে একটি বাক্য গঠন ত্রুটির ফলে মারাত্মক সিনট্যাক্স ত্রুটি হবে।
- তুলনা অপারেশন হ'ল আসল কমান্ড যা phase ষ্ঠ পর্যায়ে প্রবাহিত হয়
- সমস্ত আইএফ বিকল্পগুলি দ্বিতীয় পর্যায়ে সম্পূর্ণরূপে পার্স করা হয়েছে।
- ধারাবাহিক টোকেন ডিলিমিটারগুলি একটি একক জায়গায়।
- তুলনা অপারেটরের উপর নির্ভর করে সনাক্ত করা যায় এমন এক বা দুটি মান টোকেন থাকবে।
- ট্রু কমান্ড ব্লক শর্তের পরে কমান্ডের সেট এবং অন্য কোনও কমান্ড ব্লকের মতো পার্স করা হয়। যদি ELSE ব্যবহার করতে হয় তবে সত্যিকারের ব্লকটি অবশ্যই প্রথম বন্ধনীরূপে তৈরি করা উচিত।
- Lচ্ছিক মিথ্যা কমান্ড ব্লক হ'ল ELSE এর পরে কমান্ডের সেট। আবার এই কমান্ড ব্লকটি স্বাভাবিকভাবে পার্স করা হয়।
- সত্য এবং মিথ্যা কমান্ড ব্লকগুলি স্বয়ংক্রিয়ভাবে পরবর্তী পর্যায়ে প্রবাহিত হয় না। তাদের পরবর্তী প্রক্রিয়াকরণটি 7 ম ধাপের দ্বারা নিয়ন্ত্রিত।
- ডিওয়ের পরে দু'ভাগে বিভক্ত হয়ে যায়। নির্মাণের ক্ষেত্রে একটি সিনট্যাক্স ত্রুটির ফলে মারাত্মক সিনট্যাক্স ত্রুটি হবে।
- ডিও এর মাধ্যমে অংশটি হ'ল আসল ফর পুনরাবৃত্তি কমান্ড যা phase ধাপের মধ্য দিয়ে প্রবাহিত হয়
- সমস্ত বিকল্প বিকল্পগুলি দ্বিতীয় পর্যায়ে সম্পূর্ণরূপে পার্স করা হয়েছে।
- আইএন প্রথম বন্ধনীযুক্ত ধারা
<LF>
হিসাবে আচরণ করে <space>
। আইএন ক্লজটি পার্স করার পরে, সমস্ত টোকেনগুলি একত্রে একত্রিত হয়ে একটি টোকেন গঠন করে।
- ধারাবাহিকভাবে অপরিবর্তিত / অপ্রকাশিত টোকেন ডিলিমিটারগুলি ডিও এর মাধ্যমে ফর কমান্ড জুড়ে একটি একক জায়গায় collapse
- ডিওয়ের পরে থাকা অংশটি একটি কমান্ড ব্লক যা সাধারণত পার্স করা হয়। ডিও কমান্ড ব্লকের পরবর্তী প্রক্রিয়াকরণটি পর্যায় 7 এর পুনরাবৃত্তির দ্বারা বিযুক্ত করা হয়।
- দ্বিতীয় ধাপে সনাক্ত করা আরইএম অন্যান্য কমান্ডের চেয়ে নাটকীয়ভাবে পৃথক করা হয়।
- শুধুমাত্র একটি যুক্তি টোকেন পার্স করা হয়েছে - প্রথম যুক্তি টোকেন পরে পার্সার অক্ষর উপেক্ষা করে।
- আরইএম কমান্ডটি ফেজ 3 আউটপুটে উপস্থিত হতে পারে তবে কমান্ডটি কখনই কার্যকর হয় না এবং মূল যুক্তির পাঠ্য প্রতিধ্বনিত হয় - এস্কেপিং ক্যারেটগুলি সরানো হয় না ...
- যদি একটি মাত্র আর্গুমেন্ট টোকেন থাকে যা একটি অনির্বাচিত
^
দিয়ে শেষ হয় যা লাইনটি শেষ করে, তবে আর্গুমেন্ট টোকেনটি ফেলে দেওয়া হয়, এবং পরবর্তী লাইনটি পার্স করে REM এ সংযুক্ত করা হয়। একাধিক টোকেন না থাকলে বা শেষ চরিত্রটি না হওয়া পর্যন্ত এটি পুনরাবৃত্তি করে ^
।
- যদি কমান্ড টোকেনটি শুরু হয়
:
এবং এটি দ্বিতীয় পর্বের প্রথম রাউন্ড ((ধাপে কল করার কারণে পুনরায় আরম্ভ নয়) তবে
- টোকেনটি সাধারণত একটি অনিবন্ধিত লেবেল হিসাবে বিবেচিত হয় ।
- লাইন বাকি পার্স করা হয়, তবে
)
, <
, >
, &
এবং |
আর বিশেষ অর্থ আছে। লাইনের পুরো অবশিষ্টটি "কমান্ড" লেবেলের অংশ হিসাবে বিবেচিত হয়।
^
বিশেষ হতে, যার অর্থ যে লাইন ধারাবাহিকতা লেবেলে পরবর্তী পংক্তির শেষে ব্যবহার করা যেতে পারে চলতে থাকে।
- প্রথম পংক্তিতে অবিলম্বে কোনও আদেশ বা এক্সিকিউটেড লেবেল অনুসরণ না করা হলে প্রথম বন্ধনীযুক্ত ব্লকের মধ্যে একটি অব্যবহৃত লেবেল মারাত্মক সিনট্যাক্স ত্রুটির কারণ হতে পারে ।
(
অব্যক্ত লেবেল অনুসরণকারী প্রথম কমান্ডটির আর বিশেষ অর্থ নেই ।
- লেবেল বিশ্লেষণ সম্পূর্ণ হওয়ার পরে কমান্ডটি বাতিল করা হয়েছে। পরবর্তী স্তরগুলি লেবেলের জন্য স্থান নেয় না
- তিনটি ব্যতিক্রম রয়েছে যার ফলে দ্বিতীয় পর্যায়ে পাওয়া লেবেলকে এক্সিকিউটেড লেবেল হিসাবে গণ্য করা যেতে পারে যা phase ধাপের মধ্য দিয়ে পার্স করা অব্যাহত রয়েছে।
- সেখানে ফেরৎ যে তার আগে বসেছে ট্যাগ টোকেনটি, এবং সেখানে একটি হল
|
নল বা &
, &&
অথবা ||
লাইনে কমান্ড সংযুক্তকরণের।
- এখানে পুনঃনির্দেশ রয়েছে যা লেবেল টোকেনের আগে এবং কমান্ডটি প্রথম বন্ধনী ব্লকের মধ্যে রয়েছে।
- প্রথম বন্ধনযুক্ত ব্লকের মধ্যে একটি রেখার উপরে লেবেল টোকেন হ'ল প্রথম কমান্ড, এবং উপরের লাইনটি একটি নিরবিচ্ছিন্ন লেবেল দিয়ে শেষ হয়েছে ।
- যখন দ্বিতীয় পর্যায়ে এক্সিকিউটেড লেবেল আবিষ্কার করা
হয় তখন নিম্নলিখিতটি ঘটে
- লেবেল, তার আর্গুমেন্টগুলি এবং এর পুনঃনির্দেশগুলি 3 য় পর্যায়ে কোনও প্রতিধ্বনি আউটপুট থেকে বাদ দেওয়া হয়েছে
- লাইনে পরবর্তী কোনও সংক্ষিপ্ত কমান্ড সম্পূর্ণরূপে বিশ্লেষণ এবং সম্পাদন করা হয়।
- সম্পর্কে আরও তথ্যের জন্য শাস্তিপ্রাপ্ত লেবেলসমূহ বনাম অসম্পন্ন লেবেলসমূহ দেখুন https://www.dostips.com/forum/viewtopic.php?f=3&t=3803&p=55405#p55405
ধাপ 3) পার্সড কমান্ড (গুলি) কেবলমাত্র কমান্ড ব্লক দিয়ে শুরু না @
হলে পূর্ববর্তী পদক্ষেপের শুরুতে ECHO চালু ছিল E
চতুর্থ পর্যায়) %X
পরিবর্তনশীল প্রসারণের জন্য: কেবলমাত্র একটি ফর কমান্ড সক্রিয় থাকলে এবং ডিও-র পরে কমান্ডগুলি প্রক্রিয়াজাত হয়।
- এই মুহুর্তে, ব্যাচ প্রসেসিং ফেজ 1 জনকে ইতিমধ্যে পরিবর্তনশীল মত রূপান্তরিত হবে
%%X
মধ্যে %X
। কমান্ড লাইনটির প্রথম ধাপের জন্য বিভিন্ন শতাংশ প্রসারণ বিধি রয়েছে This এটি কারণ হ'ল কমান্ড লাইনগুলি ব্যবহার করে %X
তবে ব্যাচ ফাইলগুলি %%X
ভেরিয়েবলের জন্য ব্যবহার করে ।
- পরিবর্তনশীল নামগুলির জন্য কেস সংবেদনশীল তবে
~modifiers
কেস সংবেদনশীল নয়।
~modifiers
পরিবর্তনশীল নামের চেয়ে অগ্রাধিকার নিন। নিম্নলিখিত বর্ণের অক্ষর যদি একটি ~
পরিবর্তনকারী এবং বৈকল্পিক নামের জন্য বৈধ উভয় হয় এবং এর পরে একটি অক্ষর বিদ্যমান থাকে যা ভেরিয়েবল নামের জন্য সক্রিয় থাকে, তবে অক্ষরটি সংশোধক হিসাবে ব্যাখ্যা করা হয়।
- পরিবর্তনশীল নামগুলির জন্য বিশ্বব্যাপী, তবে কেবল একটি ডিও ক্লজের প্রসঙ্গে। যদি কোনও রুটিন একটি ডিও শর্তের মধ্যে থেকে কল করা হয়, তবে ফোর ভেরিয়েবলগুলি কল কলের রুটিনের মধ্যে প্রসারিত হয় না। কিন্তু যদি রুটিন নিজস্ব জন্য কমান্ড আছে, তারপর সব বর্তমানে ভেরিয়েবল জন্য সংজ্ঞায়িত ভেতরের আপনি কি কমান্ড অ্যাক্সেস করা যায়।
- পরিবর্তিত নামগুলির জন্য নেস্টেড ফোর্সগুলির মধ্যে পুনরায় ব্যবহার করা যেতে পারে। অভ্যন্তরীণ ফর মানটি অগ্রাধিকার গ্রহণ করে, তবে একবার INNER for বন্ধ হয়ে গেলে বাহ্যিক ফর মান পুনরুদ্ধার করা হয়।
- যদি এই পর্বের শুরুতে ECHO চালু ছিল, তবে ফেজ 3) ফোর ভেরিয়েবলগুলি প্রসারিত হওয়ার পরে পার্সড ডিও কমান্ডগুলি দেখানোর জন্য পুনরাবৃত্তি করা হয়।
---- এই দিক থেকে, দ্বিতীয় পর্বে চিহ্নিত প্রতিটি কমান্ড পৃথকভাবে প্রক্রিয়া করা হবে।
---- পরের দিকে যাওয়ার আগে একটি কমান্ডের জন্য 5 থেকে 7 পর্যায়ের পর্যায়গুলি সম্পন্ন হয়।
পর্ব 5) বিলম্বিত সম্প্রসারণ: কেবলমাত্র বিলম্বিত প্রসারণ চালু থাকলে, কমান্ডটি পাইপের উভয় পাশের বন্ধুত্বযুক্ত ব্লকের মধ্যে নেই এবং কমান্ডটি একটি "নগ্ন" ব্যাচের স্ক্রিপ্ট নয় (বন্ধনীর বাইরে স্ক্রিপ্টের নাম, CALL, কমান্ড কনটেনটেশন, বা পাইপ)।
- কমান্ডের প্রতিটি টোকেন স্বাধীনভাবে বিলম্বিত প্রসারণের জন্য পার্স করা হয়।
- বেশিরভাগ কমান্ড দুটি বা ততোধিক টোকেনকে বিশ্লেষণ করে - কমান্ড টোকেন, আর্গুমেন্ট টোকেন এবং প্রতিটি পুনর্নির্দেশ গন্তব্য টোকেন।
- ফর কমান্ডটি কেবল আইএন ক্লজ টোকেনকে পার্স করে।
- আইএফ কমান্ড তুলনা মানগুলি কেবল পার্স করে - তুলনা অপারেটরের উপর নির্ভর করে এক বা দুটি হয়।
- প্রতিটি পার্সড টোকেনের জন্য, প্রথমে এটি কোনও রয়েছে কিনা তা পরীক্ষা করুন
!
। যদি তা না হয় তবে টোকেনটি বিশ্লেষণ করা হবে না - ^
অক্ষরের জন্য গুরুত্বপূর্ণ । যদি টোকেনটিতে থাকে !
, তবে প্রতিটি অক্ষর বাম থেকে ডানে স্ক্যান করুন:
- যদি এটি একটি ক্যারেট (
^
) হয় তবে পরের চরিত্রটির কোনও বিশেষ অর্থ নেই, ক্যারেটটি নিজেই সরানো হবে
- যদি এটি বিস্ময়কর চিহ্ন হয় তবে পরবর্তী বিস্মরণ চিহ্নটি অনুসন্ধান করুন (ক্যারেটগুলি আর পর্যবেক্ষণ করা হয় না), ভেরিয়েবলের মানটিতে প্রসারিত করুন।
- ধারাবাহিক উদ্বোধনটি
!
একটি একক হয়ে পড়েছে!
- অপরিশোধিত যেকোন অবশিষ্ট
!
অপসারণ করা হয়েছে
- এই পর্যায়ে ভারগুলি প্রসারিত করা "নিরাপদ", কারণ বিশেষ অক্ষরগুলি আর সনাক্ত করা যায় না (এমনকি
<CR>
বা <LF>
)
- আরও সম্পূর্ণ ব্যাখ্যার জন্য ডাবেনহ্যাম একই থ্রেড - এক্সক্লিমেশন
পয়েন্ট ফেজ থেকে এর দ্বিতীয়ার্ধটি পড়ুন
ফেজ 5.3) পাইপ প্রসেসিং: কেবলমাত্র পাইপের উভয় পাশের কমান্ডগুলি থাকলে পাইপের
প্রতিটি পাশই স্বতন্ত্র এবং অ্যাসিনক্রোনাকলভাবে প্রক্রিয়াজাত হয়।
- যদি কমান্ডটি cmd.exe এর অভ্যন্তরীণ হয়, বা এটি একটি ব্যাচ ফাইল, বা যদি এটি একটি প্রথম বন্ধনীযুক্ত কমান্ড ব্লক হয় তবে এটি একটি নতুন cmd.exe থ্রেডের মাধ্যমে কার্যকর করা হয়
%comspec% /S /D /c" commandBlock"
, সুতরাং কমান্ড ব্লকটি একটি ফেজ পুনঃসূচনা পায় তবে এইবার কমান্ড লাইন মোডে।
- যদি প্রথম বন্ধনীযুক্ত কমান্ডটি অবরুদ্ধ করে থাকে, তারপরে
<LF>
এবং পরে সমস্ত কমান্ড সহ রূপান্তরিত হয় <space>&
। অন্য <LF>
ছিনতাই হয়।
- এটি পাইপ কমান্ডগুলির প্রক্রিয়াজাতকরণের সমাপ্তি।
- দেখুন কেন বিলম্বিত সম্প্রসারণ ব্যর্থ যখন কোডের পাইপ ব্লক ভিতরে? পাইপ পার্সিং এবং প্রক্রিয়াজাতকরণ সম্পর্কে আরও তথ্যের জন্য
ফেজ 5.5) পুনর্নির্দেশ কার্যকর করুন: দ্বিতীয় ধাপে আবিষ্কার করা যে কোনও পুনর্নির্দেশটি এখন কার্যকর করা হয়েছে।
ধাপ)) কল প্রক্রিয়াকরণ / ক্যারেট দ্বিগুণকরণ: কেবলমাত্র কমান্ড টোকেনটি কল করা হয়, বা যদি প্রথম ঘটনাক্রমে স্ট্যান্ডার্ড টোকেন ডিলিমিটারের পূর্বে পাঠ্য কল হয়। যদি CALL বৃহত্তর কমান্ড টোকেন থেকে পার্স করা হয়, তবে অব্যবহৃত অংশটি এগিয়ে যাওয়ার আগে আর্গুমেন্টের টোকেনটিতে চাপানো হবে।
- একটি অব্যক্ত জন্য আর্গুমেন্ট টোকেন স্ক্যান
/?
। যদি টোকেনের মধ্যে কোথাও পাওয়া যায়, তবে phase ম পর্যায় বাতিল করুন এবং। ধাপে এগিয়ে যান, যেখানে কলের জন্য সহায়তা প্রিন্ট করা হবে।
- প্রথমটি সরিয়ে ফেলুন
CALL
, যাতে একাধিক কল স্ট্যাক করা যায়
- সমস্ত কেরেটের দ্বিগুণ
- 1, 1.5 এবং 2 পর্যায়গুলি পুনরায় চালু করুন, তবে 3 ধাপে চালিয়ে যান না
- যে কোনও দ্বিগুণ ক্যারেট যতক্ষণ না উদ্ধৃত হয় ততক্ষণ একটি ক্যারেটে ফিরে আসবে। তবে দুর্ভাগ্যক্রমে, উদ্ধৃত ক্যারেটগুলি দ্বিগুণ থেকে যায়।
- পর্ব 1 কিছুটা পরিবর্তন হয়েছে
- 1.2 বা 1.3 ধাপে সম্প্রসারণ ত্রুটিগুলি CALL বাতিল করে দেয় তবে ত্রুটিটি মারাত্মক নয় - ব্যাচ প্রক্রিয়াজাতকরণ অব্যাহত থাকে।
- দ্বিতীয় ধাপের কাজগুলি কিছুটা পরিবর্তন করা হয়েছে
- দ্বিতীয় ধাপের প্রথম রাউন্ডে সনাক্ত করা হয়নি এমন যে কোনও নতুন প্রদর্শিত, অব্যক্ত, অব্যাহত পুনঃনির্দেশ সনাক্ত করা হয়েছে তবে এটি পুনরায় নির্দেশনা সম্পাদন না করে (ফাইলের নাম সহ) মুছে ফেলা হয়েছে
- লাইনটির শেষে যে কোনও সদ্য উপস্থিত হওয়া অব্যক্ত, অব্যাহত ক্যারেট লাইনের ধারাবাহিকতা না করে সরানো হবে
- নিম্নলিখিতগুলির কোনও সনাক্ত করা থাকলে সিএএলএল ত্রুটি ছাড়াই বাতিল করা হয় is
- নতুনভাবে হাজির হচ্ছে অব্যবহৃত, অনির্বাচিত
&
বা|
- ফলস্বরূপ কমান্ড টোকেন শুরু হয় অব্যক্ত, অপরিবর্তিত ছাড়াই
(
- সরানো কলটির পরে খুব প্রথম টোকেনটি শুরু হয়েছিল
@
- পরিসমাপ্তি কমান্ড একটি আপাতদৃষ্টিতে বৈধ যদি বা হয়, তাহলে মৃত্যুদন্ড পরবর্তীকালে জানায় একটি ত্রুটি ঘটেছে যার ব্যর্থ হয়ে যাবে
IF
বা FOR
একটি অভ্যন্তরীণ অথবা বহিরাগত কমান্ড হিসাবে স্বীকৃত নয়।
- অবশ্যই কল অফ ফেস 2 এই 2nd রাউন্ডে বাতিল করা হয় না পরিসমাপ্তি কমান্ড টোকেন সঙ্গে একটি লেবেল শুরুতে যদি
:
।
- ফলস্বরূপ কমান্ড টোকেনটি যদি কল হয়, তবে ফেজ rest পুনরায় চালু করুন (আর কোনও কল না করা পর্যন্ত পুনরাবৃত্তি হবে)
- ফলস্বরূপ কমান্ড টোকেনটি যদি একটি ব্যাচের স্ক্রিপ্ট বা একটি: লেবেল হয়, তবে সিএএলএল এর সম্পাদন সম্পূর্ণরূপে ফেজ of এর বাকী দ্বারা পরিচালিত হবে।
- কল স্ট্যাকের বর্তমান ব্যাচ স্ক্রিপ্ট ফাইল অবস্থানটি পুশ করুন যাতে CALL শেষ হয়ে গেলে কার্যকর অবস্থানটি সঠিক অবস্থান থেকে শুরু করতে পারে।
- সমস্ত ফলস্বরূপ টোকেন ব্যবহার করে CALL এর জন্য% 0,% 1,% 2, ...% N এবং% * আর্গুমেন্ট টোকেন সেটআপ করুন
- কমান্ড টোকেন যদি এমন একটি লেবেল থাকে যা দিয়ে শুরু হয়
:
, তবে
- পুনঃসূচনা 5 ম পর্যায় 5 এটি প্রভাব ফেলতে পারে: লেবেলটি কল করা হয়। % 0 ইত্যাদি টোকেনগুলি ইতিমধ্যে সেটআপ হয়ে গেছে বলে এটি কল আউট রুটিনে পাস হওয়া আর্গুমেন্টগুলিকে পরিবর্তন করবে না।
- সাবরোটিনের শুরুতে ফাইল পয়েন্টারটির অবস্থান নির্ধারণের জন্য গোটো লেবেল সম্পাদন করুন (অন্য কোনও টোকেন যা লেবেল অনুসরণ করতে পারে তা উপেক্ষা করুন) গোটো কীভাবে কাজ করে তার নিয়মের জন্য পর্যায় 7 দেখুন See
- যদি: লেবেল টোকেন অনুপস্থিত, বা: লেবেলটি পাওয়া যায় না, তবে সংরক্ষিত ফাইলের অবস্থান পুনরুদ্ধার করার জন্য কল স্ট্যাকটি তত্ক্ষণাত পপড হয়ে যায়, এবং CALL বাতিল করে দেওয়া হয়।
- যদি: লেবেলটি ধারণ করে / ?, হয়, তবে GOTO সহায়তা: লেবেল অনুসন্ধানের পরিবর্তে মুদ্রণ করা হবে। ফাইল পয়েন্টারটি সরে না, যেমন কোডটি সিএলএল দু'বার কার্যকর হওয়ার পরে একবার CALL প্রসঙ্গে এবং তারপরে আবার CALL ফেরার পরে আসে। দেখুন কেন এই কলটিতে কল কল সাহায্যের বার্তা মুদ্রণ করে? এবং এরপরে কমান্ডটি কেন দু'বার কার্যকর করা হবে? আরও তথ্যের জন্য.
- অন্যথায় নির্দিষ্ট ব্যাচের স্ক্রিপ্টে স্থানান্তর নিয়ন্ত্রণ।
- CALLed এর এক্সিকিউশন: লেবেল বা স্ক্রিপ্ট অব্যাহত থাকে যতক্ষণ না হয় Exit / B বা ফাইলের শেষের দিকে পৌঁছে যায়, এই পর্যায়ে CALL স্ট্যাকটি পপ হয় এবং সংরক্ষণকৃত ফাইল অবস্থান থেকে সম্পাদন পুনরায় শুরু হয়।
কল প্লে স্ক্রিপ্ট বা: লেবেলের জন্য 7 ম পর্যায় কার্যকর করা হয় না।
- অন্য phase ধাপের ফলাফল কার্যকর করার জন্য phase ধাপের মধ্যে পড়ে।
ফেজ 7) এক্সিকিউট: কমান্ডটি কার্যকর করা হয়
- 7.1 - অভ্যন্তরীণ কমান্ড কার্যকর করুন - যদি কমান্ড টোকেনটি উদ্ধৃত হয়, তবে এই পদক্ষেপটি এড়িয়ে যান। অন্যথায়, একটি অভ্যন্তরীণ কমান্ড বিশ্লেষণ এবং কার্যকর করার চেষ্টা করুন।
- নিম্নলিখিত প্রশ্নাগুলি নির্ধারণ করা হয়েছে যে কোনও উত্তরহীন কমান্ড টোকেন একটি অভ্যন্তরীণ কমান্ড উপস্থাপন করে:
- যদি কমান্ড টোকেনটি অভ্যন্তরীণ কমান্ডের সাথে সঠিকভাবে মেলে, তবে এটি কার্যকর করুন।
- অন্যথায় প্রথম উপস্থিতির আগে কমান্ড টোকনটি ভাঙ্গুন
+
/
[
]
<space>
<tab>
,
;
বা =
পূর্ববর্তী পাঠ্যটি যদি অভ্যন্তরীণ আদেশ হয় তবে সেই আদেশটি মনে রাখবেন
- যদি কমান্ড লাইন মোডে থাকে, বা যদি কমান্ডটি প্রথম বন্ধনীযুক্ত ব্লক থেকে থাকে, যদি সত্য বা মিথ্যা কমান্ড ব্লক, ডু কমান্ড ব্লকের জন্য বা কমান্ড কনটেনটেশনের সাথে জড়িত থাকে, তবে অভ্যন্তরীণ কমান্ডটি কার্যকর করুন
- অন্যটি (ব্যাচ মোডে অবশ্যই একা একা কমান্ড হতে হবে) বর্তমান ফোল্ডারটি স্ক্যান করে .COM, .EXE, .BAT, বা .CMD ফাইলের জন্য যার মূল নামটি মূল কমান্ড টোকেনের সাথে মেলে
- যদি প্রথম মিলের ফাইলটি একটি .BAT বা .CMD হয়, তবে 7.3.exec এ যান এবং সেই স্ক্রিপ্টটি কার্যকর করুন
- অন্য (ম্যাচটি পাওয়া যায় নি বা প্রথম ম্যাচটি হয়। EXE বা .COM) মনে রাখা অভ্যন্তরীণ কমান্ড কার্যকর করে
- অন্যথায় প্রথম উপস্থিতির আগে কমান্ড টোকনটি ভাঙ্গুন
.
\
বা :
পূর্ববর্তী পাঠ্যটি কোনও অভ্যন্তরীণ কমান্ড না হলে 7.২
পূর্ববর্তী পাঠ্যটি অভ্যন্তরীণ কমান্ড হতে পারে। এই আদেশ মনে রাখবেন।
- প্রথম উপস্থিতির আগে কমান্ড টোকনটি ভাঙ্গুন
+
/
[
]
<space>
<tab>
,
;
বা =
পূর্ববর্তী পাঠ্যটি যদি কোনও বিদ্যমান ফাইলে যাওয়ার পথ হয় তবে যান 7.2
অন্যথায় স্মরণযোগ্য অভ্যন্তরীণ কমান্ড কার্যকর করুন।
- যদি অভ্যন্তরীণ কমান্ডটি বৃহত্তর কমান্ড টোকেন থেকে পার্স করা হয়, তবে কমান্ড টোকেনের অব্যবহৃত অংশটি আর্গুমেন্ট তালিকায় অন্তর্ভুক্ত করা হবে
- কোনও কমান্ড টোকেনকে অভ্যন্তরীণ কমান্ড হিসাবে বিশ্লেষণ করার অর্থ এই নয় যে এটি সফলভাবে কার্যকর হবে। প্রতিটি আভ্যন্তরীণ কমান্ডের নিজস্ব নিয়ম রয়েছে কীভাবে আর্গুমেন্ট এবং বিকল্পগুলি পার্স করা হয় এবং কী সিনট্যাক্স অনুমোদিত allowed
- সমস্ত অভ্যন্তরীণ কমান্ডগুলি
/?
সনাক্ত করা থাকলে তাদের ফাংশন সম্পাদনের পরিবর্তে সহায়তা মুদ্রণ করবে । /?
এটি আর্গুমেন্টের যে কোনও জায়গায় উপস্থিত থাকলে বেশিরভাগকে সনাক্ত করুন । তবে ECHO এবং SET এর মতো কয়েকটি কমান্ড কেবল প্রথম মুদ্রণ টোকেন শুরু হলে মুদ্রণ সহায়তা করে /?
।
- SET এর কিছু আকর্ষণীয় শব্দার্থক শব্দ রয়েছে:
- ভেরিয়েবলের নাম এবং এক্সটেনশানগুলি সক্ষম করার আগে যদি কোনও এসইটি কমান্ডের একটি উদ্ধৃতি থাকে
set "name=content" ignored
-> মান = content
তবে প্রথম সমান চিহ্ন এবং শেষ উদ্ধৃতিটির মধ্যবর্তী পাঠ্যটি সামগ্রী হিসাবে ব্যবহৃত হবে (প্রথম সমান এবং শেষ উদ্ধৃতি বাদ দেওয়া হয়েছে)। শেষ উদ্ধৃতিটির পরে পাঠ্য উপেক্ষা করা হবে। যদি সমান চিহ্নের পরে কোনও উদ্ধৃতি না থাকে, তবে বাকী রেখাটি সামগ্রী হিসাবে ব্যবহৃত হয়।
- যদি কোনও এসইটি কমান্ডের নামের
set name="content" not ignored
-> মান = এর আগে একটি উদ্ধৃতি না থাকে "content" not ignored
তবে সমান হওয়ার পরে লাইনের পুরো অবশিষ্টটি উপস্থিত এবং উপস্থিত সমস্ত উক্তি সমেত সামগ্রী হিসাবে ব্যবহৃত হবে।
- যদি একটি আইএফ তুলনা মূল্যায়ন করা হয়, এবং শর্তটি সত্য বা মিথ্যা কিনা তার উপর নির্ভর করে উপযুক্ত ইতিমধ্যে পার্সড নির্ভরশীল কমান্ড ব্লকটি প্রক্রিয়া করা হয়, পর্ব 5 থেকে শুরু করে।
- ফর কমান্ডের আইএন ক্লজটি যথাযথভাবে পুনরাবৃত্তি করা হয়।
- যদি এটি কোনও ফর / এফ হয় যা কমান্ড ব্লকের আউটপুটকে পুনরাবৃত্তি করে, তবে:
- আইএন ক্লজটি সিএমডি / সি এর মাধ্যমে একটি নতুন সেন্টিমিডি.এক্সই প্রক্রিয়ায় কার্যকর করা হয়।
- কমান্ড ব্লকটি অবশ্যই দ্বিতীয়বার পুরো পার্সিং প্রক্রিয়াটির মধ্য দিয়ে যেতে হবে, তবে এবার একটি কমান্ড লাইনের প্রসঙ্গে
- ECHO চালু হবে, এবং বিলম্বিত সম্প্রসারণটি সাধারণত অক্ষম হয়ে যায় (রেজিস্ট্রি সেটিংয়ের উপর নির্ভরশীল)
- আইএন ক্লজ কমান্ড ব্লকের দ্বারা করা সমস্ত পরিবেশগত পরিবর্তনগুলি শিশু সিএমডি.এক্স.এক্স প্রক্রিয়াটি শেষ হয়ে গেলে হারিয়ে যাবে
- প্রতিটি পুনরাবৃত্তির জন্য:
- ফর ভেরিয়েবলের মানগুলি সংজ্ঞায়িত করা হয়
- ইতিমধ্যে পার্স করা ডিও কমান্ড ব্লকটি প্রক্রিয়া করা হবে, ফেজ 4 দিয়ে শুরু হবে।
- গোটো: লেবেল সনাক্ত করতে নিম্নলিখিত যুক্তি ব্যবহার করে
- লেবেলটি প্রথম আর্গুমেন্ট টোকেন থেকে পার্স করা হয়েছে
- স্ক্রিপ্টটি লেবেলের পরবর্তী ঘটনার জন্য স্ক্যান করা হয়েছে
- বর্তমান ফাইল অবস্থান থেকে স্ক্যান শুরু হয়
- যদি ফাইলের শেষের দিকে পৌঁছে যায়, তবে স্ক্যানটি ফাইলের শুরুতে ফিরে আসে এবং মূল শুরুর পয়েন্টে অবিরত থাকে।
- স্ক্যানটি লেবেলের যে সন্ধান পায় এটির প্রথম উপস্থিতিতে থামিয়ে দেয় এবং ফাইল পয়েন্টারটি লেবেলের সাথে সাথেই লাইনে সেট করা থাকে। স্ক্রিপ্টটির কার্য সম্পাদন সেই বিন্দু থেকে পুনরায় শুরু হয়। মনে রাখবেন যে একটি সফল সত্য GOTO অবিলম্বে ফর লুপগুলি সহ কোনও পার্সড ব্লক কোড বাতিল করে দেবে।
- যদি লেবেলটি পাওয়া যায় না, বা লেবেল টোকেনটি অনুপস্থিত থাকে তবে GOTO ব্যর্থ হয়, একটি ত্রুটি বার্তা মুদ্রিত হয় এবং কল স্ট্যাকটি পপ হয়। এটি কার্যকরভাবে একটি এক্সআইটিটি / বি হিসাবে কার্যকর করে, বর্তমান কমান্ড ব্লকের যে কোনও পার্সড কমান্ডগুলি ছাড়াও জিওটিও অনুসরণ করে এখনও কার্যকর করা হয়, তবে CALLer এর প্রসঙ্গে (প্রসঙ্গ যা প্রসারিত হয় / প্রস্থানের পরে বিদ্যমান)
- লেবেল বিশ্লেষণের জন্য ব্যবহৃত বিধিগুলির আরও সুনির্দিষ্ট বিবরণের জন্য https://www.dostips.com/forum/viewtopic.php?f=3&t=3803 দেখুন ।
- পুনরায় নামকরণ এবং কপি উভয় উত্স এবং টার্গেট পাথের জন্য ওয়াইল্ডকার্ড গ্রহণ করে। মাইক্রোসফ্ট বিশেষত টার্গেট পাথের জন্য কীভাবে ওয়াইল্ডকার্ডগুলি কাজ করে তার ডকুমেন্টিং একটি ভয়ানক কাজ করে। উইন্ডোকার্ড নিয়মের একটি কার্যকর সেট পাওয়া যেতে পারে উইন্ডোজ রেইম কমান্ড কীভাবে ওয়াইল্ডকার্ডকে ব্যাখ্যা করে?
- .2.২ - ভলিউম পরিবর্তন সম্পাদন করুন - অন্যথায় যদি কমান্ড টোকেনটি উদ্ধৃতি দিয়ে শুরু না হয়, ঠিক দুটি অক্ষর দীর্ঘ হয়, এবং ২ য় অক্ষরটি একটি কোলন হয়, তবে ভলিউম পরিবর্তন করুন
- সমস্ত আর্গুমেন্ট টোকেন উপেক্ষা করা হয়
- প্রথম অক্ষর দ্বারা নির্দিষ্ট ভলিউম যদি খুঁজে পাওয়া যায় না, তবে একটি ত্রুটি সহ বাতিল করুন
- একটি কমান্ড টোকেন
::
সর্বদা ত্রুটির ফলশ্রুতি দেয় যতক্ষণ না এসইউবিএসটি একটি ভলিউম সংজ্ঞায়িত করতে ব্যবহৃত হয় ::
যদি SUBST এর জন্য একটি ভলিউম সংজ্ঞায়িত করতে ব্যবহৃত হয় ::
, তবে ভলিউমটি পরিবর্তন করা হবে, এটি একটি লেবেল হিসাবে বিবেচনা করা হবে না।
- 7.3 - বহিরাগত কমান্ড কার্যকর করুন - অন্যথায় আদেশটি বহিরাগত কমান্ড হিসাবে বিবেচনা করার চেষ্টা করুন।
- কমান্ড লাইন মোড এবং কমান্ড উদ্ধৃত করা না থাকলে এবং একটি ভলিউম স্পেসিফিকেশন, সাদা-স্পেস দিয়ে শুরু নয়,
,
, ;
, =
বা +
তারপর কমান্ডের প্রথম সংঘটন এ টোকেনটি বিরতি <space>
,
;
বা =
এবং টোকেন (গুলি) যুক্তি বাকি পূর্বে লিখুন।
- কমান্ড টোকেনের 2 য় অক্ষরটি যদি কোলন হয় তবে 1 ম অক্ষর দ্বারা নির্দিষ্ট ভলিউমটি যাচাই করা যেতে পারে।
যদি ভলিউমটি পাওয়া যায় না, তবে একটি ত্রুটি সহ বাতিল করুন।
- যদি ব্যাচ মোডে থাকে এবং কমান্ড টোকেনটি শুরু হয়
:
, তবে যান 7.৪
দ্রষ্টব্য যে লেবেল টোকেনটি যদি শুরু হয় ::
, তবে এটি পৌঁছানো যাবে না কারণ পূর্ববর্তী পদক্ষেপটি ত্রুটির সাথে বাতিল হয়ে থাকবে যদি না SUBST এর জন্য একটি ভলিউম সংজ্ঞায়িত করতে ব্যবহৃত হয় ::
।
- এক্সিকিউট করতে বাহ্যিক কমান্ড শনাক্ত করুন।
- এটি একটি জটিল প্রক্রিয়া যা বর্তমান ভলিউম, বর্তমান ডিরেক্টরি, PATH ভেরিয়েবল, পাঠ্য ভেরিয়েবল এবং ফাইল অ্যাসোসিয়েশন জড়িত থাকতে পারে।
- যদি কোনও বৈধ বহিরাগত কমান্ড সনাক্ত করা যায় না, তবে ত্রুটি সহ বাতিল করুন।
- যদি কমান্ড লাইন মোডে থাকে এবং কমান্ড টোকেনটি দিয়ে শুরু হয়
:
, তবে যান 7.4
নোট করুন যে এটি কদাচিৎ পৌঁছেছে কারণ পূর্ববর্তী পদক্ষেপটি ত্রুটি দ্বারা বাতিল হয়ে যাবে যদি না কমান্ড টোকেন শুরু হয় ::
, এবং SUBST এর জন্য একটি ভলিউম সংজ্ঞায়িত করতে ব্যবহৃত হয় ::
, এবং সম্পূর্ণ কমান্ড টোকেন একটি বাহ্যিক কমান্ডের একটি বৈধ পথ।
- 7.3.exec - বাহ্যিক কমান্ড কার্যকর করুন।
- 7.4 - একটি লেবেল উপেক্ষা করুন - কমান্ড টোকেন শুরু হলে কমান্ড এবং এর সমস্ত যুক্তি উপেক্ষা করুন
:
।
.2.২ এবং .3.৩ এর বিধিগুলি এই লেবেলে পৌঁছতে বাধা দিতে পারে prevent
কমান্ড লাইন পার্সার:
ব্যাচলাইন-পার্সারের মতো কাজ করে, বাদে:
পর্ব 1) শতাংশ সম্প্রসারণ:
- না
%*
, %1
ইত্যাদি যুক্তি প্রসার
- যদি ভার
%var%
অপরিবর্তিত থাকে তবে অপরিবর্তিত রয়েছে।
- কোন বিশেষ পরিচালনা
%%
। যদি var = সামগ্রী থাকে তবে %%var%%
প্রসারিত হয় %content%
।
পর্ব 3) পার্সড কমান্ড (গুলি) প্রতিধ্বনি করুন
- এটি দ্বিতীয় ধাপ 2 পরে সম্পাদন করা হয় না এটি কেবল ডিও কমান্ড ব্লকের জন্য ফেজ 4 পরে করা হয়।
পর্ব 5) বিলম্বিত সম্প্রসারণ: কেবলমাত্র যদি বিলম্বপ্রাপ্তি সক্ষম হয়
- যদি ভার
!var!
অপরিবর্তিত থাকে তবে অপরিবর্তিত রয়েছে।
পর্ব 7) আদেশ কার্যকর করুন
- কল বা GOTO এ করার চেষ্টা করুন: লেবেলের ফলে একটি ত্রুটি হয়।
- ইতিমধ্যে 7 ম পর্বে নথিভুক্ত হিসাবে, একটি মৃত্যুদন্ড কার্যকর লেবেল বিভিন্ন পরিস্থিতিতে একটি ত্রুটি হতে পারে।
- ব্যাচ এক্সিকিউটড লেবেলগুলি কেবল যদি শুরু হয় তবে ত্রুটি ঘটায় cause
::
- কমান্ড লাইন প্রায়শই চালিত লেবেলগুলির ফলে প্রায়শই একটি ত্রুটি হয়
পূর্ণসংখ্যার মানগুলির পার্সিং
অনেকগুলি ভিন্ন প্রসঙ্গ রয়েছে যেখানে সেন্টিমিডি.এক্সে স্ট্রিং থেকে পূর্ণসংখ্যার মানগুলি পার্স করে এবং নিয়মগুলি অসঙ্গত:
SET /A
IF
%var:~n,m%
(পরিবর্তনশীল সাবস্তর বিস্তৃতি)
FOR /F "TOKENS=n"
FOR /F "SKIP=n"
FOR /L %%A in (n1 n2 n3)
EXIT [/B] n
কীভাবে সিএমডি.এক্স.ই.এস. সংখ্যাকে পার্স করে তার বিধিগুলির বিবরণগুলি বিধিগুলিতে পাওয়া যেতে পারে
যে কেউ cmd.exe পার্সিং বিধি উন্নত করতে ইচ্ছুক তাদের জন্য ডসটিপস ফোরামে একটি আলোচনার বিষয় রয়েছে যেখানে সমস্যাগুলি প্রতিবেদন করা যেতে পারে এবং পরামর্শ দেওয়া যেতে পারে।
আশা করি এটি
জেন এরিক (জেব) কে সহায়তা করেছে - মূল লেখক এবং পর্যায়ক্রমে
ডেভ বেনহাম (ডিবেনহাম) - এর অতিরিক্ত অতিরিক্ত সামগ্রী এবং সম্পাদনা