সম্মানিত দর্শক আপনাকে স্বাগতম। আমাকে Facebook Google+ এ পাবেন। কামরুলকক্স: IF Command- MS DOS Command Line

IF Command- MS DOS Command Line



MS DOS এ যত গুরুত্বপূর্ণ DOS Command Line রয়েছে তম্মধ্যে IF Command একটি। এটি ছাড়া একটি জটিল Batch File বলতে গেলে পূর্ণতা পায় না বা সম্পূর্ণ করা যায় না। IF Command দিয়ে সাধারণত তিনটি কাজ করা যায়। যেমন-(১) এটি কোন ফাইলের অস্তিত্ব আছে কি না তা বের করে, (২) দুটি String এর মান বা Value চেক করে দেখে এবং (৩) এটি কোন Command এর Error level নির্ণয় করে। আমরা Help Command এর মাধ্যমে বিস্তারিত জানতে পারি। তবে বাস্তব প্রয়োগে না গেলে বুঝাটা একটু কঠিন হয়ে যাবে। তাই আমরা আস্তে আস্তে কমান্ডটি বাস্তব প্রয়োগ দেখে বুঝার চেষ্টা করবো আজকে।


Level Command:
If Command আলোচনার আগে আমাদের যে কয়েকটি বিষয় সম্পর্কে ধারণা নেয়া দরকার তার মধ্যে একটি হলো Level. আমরা জানি একটি বইকে কয়েকটি অধ্যায়ে বিভক্ত করা হয়। যেমনঃ ১ম অধ্যায়, ২য় অধ্যায়, ৩য় অধ্যায় ইত্যাদি। সম্ভবত আলোচনার সুবিধার্থে বা বিভিন্ন বর্ণনা খুঁজে পাওয়ার উদ্দেশ্যে বইয়ে এভাবে অধ্যায় যুক্ত করা হয়। লক্ষ্য করলে দেখা যাবে যে, কোন বইয়ে একটি অধ্যায় একাধিকবার থাকে না। যেমন যত বড় বা ছোটই হোক একটি বইয়ে ১ম অধ্যায় একটিই থাকে। একইভাবে ২য় অধ্যায়, ৩য় অধ্যায় ইত্যাদি অধ্যায়গুলো একটির বেশি থাকে না। যদি একটি অধ্যায় একাধিকবার থাকতো তাহলে অধ্যায়গুলো খুঁজে পেতে সমস্যা হতো। Level টাকেও Batch File এর অধ্যায় হিসেবে উল্লেখ করা যেতে পারে। আমরা জানি একটি Batch File এক বা একাধিক Command Line এর সমন্বয়ে তৈরি হয়। অল্প Command হলে হয়তো তেমন সমস্যা হয় না। কিন্তু Batch File টি যদি বড় হয় বা বিভিন্ন বিষয় আলাদা আলাদাভাবে যুক্ত করা দরকার হয় তাহলে Batch File এ অধ্যায়ের মত Level যুক্ত করা দরকার হয়ে পড়ে। Level গুলো যেকোন নামে হতে পারে। তবে ঐ যে বললাম, একটি Level এর সাথে আরেকটি Level এর নাম একই হতে পারবে না। Level লেখার সময় Level এর আগে : (Colon) চিহ্ন বসাতে হয়। যেমন নিচের Batch File টি লক্ষ্য করুন।

:1
echo.
echo. I am Kamrul Islam, known as KamrulCox in the web.
echo. I am very simple man, like nature and travelling.
Exit
:2
echo.
echo. I am from Cox'sBazar, the biggest seabeach in the world.
echo. I passed my past in my village Shamlapur.
Exit
:3
echo.
echo. I started my study in the village. I was a student of
echo. Cox'sBazar College in 2005. Finally I've completed my
echo. study with masters from Chittagong College.
Exit

উপরে :1, :2, :3 নামে তিনটি Level আছে। একটি Level Name এর সাথে আরেকটি Level Name মিল নেই বরং Level Name এ পার্থক্য আছে। যেকোন নামই দেয়া যায়। কিন্তু অংক সংখ্যা দেয়ার সুবিধা হলো Level Name একই না হওয়ার ব্যাপারে নিশ্চিত থাকা যায়। আশাকরি উপরের আলোচনায় Level Name এর ব্যাপারে একটি ধারণা পাওয়া গেছে।

Goto Command:
উপরের Level Name আর Goto Command এর মধ্যে রয়েছে খুব নিবিড় সম্পর্ক বলতে গেলে Level Name কে পরিপূর্ণতা দেয়ার জন্যই Goto Command কাজ করে। একটি Batch File কোথা থেকে কাজ শুরু করবে, কোন কোন Command প্রয়োগ করবে বা কোন কোন Command বাদ দেবে তা এই  Goto Command ই ঠিক করে দেয়। উপরে Level Name এ দেয়া Batch Command টিকে আমরা আরেকটু সাজিয়ে দেখি

Dir
goto 2
tasklist
TASKKILL /IM notepad.exe
:1
echo.
echo. I am Kamrul Islam, known as KamrulCox in the web.
echo. I am very simple man, like nature and travelling.
Exit
:2
echo.
echo. I am from Cox'sBazar, the biggest seabeach in the world.
echo. I passed my past in my village Shamlapur.
goto 1
:3
echo.
echo. I started my study in the village. I was a student of
echo. Cox'sBazar College in 2005. Finally I've completed my
echo. study with masters from Chittagong College.
Exit

উপরের Batch File টি ভাল করে লক্ষ্য করুন। Batch File টি শুরুতে dir Command Run করবে। এরপর Goto Command Run হবে। Goto 2 এর অর্থ হলো Level 2 তে যাও। ভাল করে দেখুন- Goto 2 এর পর tasklist এবং TASKKILL /IM notepad.exe দুটি Command রয়েছে।  Batch Command স্বাভাবিকভাবে কাজ করে গেলে dir Command এর পর এ দুটি Command রান হওয়ার কথা। এরপর Level 1 রয়েছে যার অধীনে রয়েছে একাধিক Command Line. কিন্তু Goto এ সব বাদ দিয়ে Batch Command কে নির্দেশ দিচ্ছে Level 2 থেকে পরবর্তী কাজ শুরু করার জন্য। সুতরাং Goto Command এর নির্দেশমত Command Line তার পরবর্তী কাজ Level 2 থেকে শুরু করবে। আবার লক্ষ্য করুন- Level 2 এর শেষ Command হলো gotoফলে Batch File তার পরবর্তী কাজ Level 1 থেকে শুরু করবে। Level 1 এর শেষ Command হলো Exitএর ফলে Batch File Close হয়ে যাবে। সুতরাং ঐ Batch File এর বাকি Command গুলো আর কাজ করবে না। এভাবে goto Command Batch File কে নিজের মত বিভিন্ন Levelথেকে কাজ করার সুযোগ করে দেই। এ কমান্ডটি Menu তৈরির ক্ষেত্রে বেশি ব্যবহৃত হয়।

ERRORLEVEL:
CMD.exe কোন Command পালন করার পর কমান্ডটি সফল হয়েছে নাকি ব্যর্থ হয়েছে তার একটি ফলাফল দেয়। ফলাফলটা বিভিন্ন Numeric Number বা অংক সংখ্যার (0,1,2) মাধ্যমে প্রকাশ করে যাকে Return code বা Error Status বা ERRORLEVEL বলা হয় এই Error Status বা ERRORLEVEL দেখেই বুঝা যায় Command Line তার Command সফলভাবে পালন করতে পেরেছে কি না। যেমন Windows এ আমরা একটি সফটওয়ার Install করতে গিয়ে যদি তা সফলভাবে Installed না হয় তাহলে Error Massage দিয়ে তা জানায়। যে কাজই করি না কেন সফল না কি বিফল তা Massage দেখেই বুঝা যায়। Command Line ও তার Command এর ফলাফল বিভিন্ন সংখ্যার মাধ্যমে জানায়। এক একটি Command একেকভাবেই সফলতার ERRORLEVEL দেয়। অধিকাংশ ক্ষেত্রেই 0 (শুণ্য) মানে সফল বুঝায় এবং এর থেকে বেশি সংখ্যা হলে ব্যর্থতা বুঝায়। তবে সব Program এর সফলতার ERRORLEVEL যে 0 (শুণ্য) হবে তা কিন্তু নয়। এমনকি কোন Program Return code নাও দিতে পারে কোন Return code না পেলে ফলাফল হিসেবে কিছুই দেখাই না। নিচের কমান্ডটি প্রয়োগ করে ERRORLEVEL বের করা যায়।

echo Error Level is %ERRORLEVEL%


নিচে আমরা Xcopy এর Error level বিষয়ে একটি তথ্য দিলাম। Xcopy কমান্ড প্রয়োগ করার পর নিচের Return Code গুলো আসে। এ কোডগুলো দেখে আমরা বুঝে নিতে পারি সমস্যাটা কী।

Exit Code
Description
0
Files সফলভাবে কপি হয়েছে এবং কোন ত্রুটি নাই
1
কপি করার জন্য Files পাওয়া যায় নি।
2
ইউজার CTRL+C কমান্ডের মাধ্যমে xcopy কমান্ড বন্ধ করে দিয়েছে।
4
ফাইল কপি করার জন্য Not Enough Memory Or Disk Space বা Drive Name Invalid বা Wrong Command Syntax
5
ফাইল কপি করতে গিয়ে Disk write error পাওয়া যাচ্ছে।

এখন উপরের তথ্যের ভিত্তিতে নিচের কমান্ডটি প্রয়োগ করে দেখুন।

xcopy *.exe e:\
echo Error Level is %ERRORLEVEL%
@PAUSE

অথবা যদি 0 (Zero) আর 1 (One) দুটি মাত্র ERRORLEVEL Return code পাওয়া যায় তাহলে নিচের কমান্ডটি দিতে পারি। এতে Massage দেখে বুঝা যাবে Return code কোনটি ছিল।

goto answer%ERRORLEVEL%
:answer0
echo Program had return code 0
@PAUSE
exit /b exitcode
:answer1
echo Program had return code 1
@PAUSE
exit /b exitcode


If Command:
স্কুল জীবনে English grammar পড়ার সময় আমরা Conditional Clause বিষয়ে পড়েছিলাম যেখানে If এর ব্যবহার রয়েছে। বাস্তব জীবনে শর্তযুক্ত অনেক কথাই আমরা বলে থাকি। যেমনঃ যদি বৃষ্টি হয় আমি বাইরে যাবো নাবাক্যটি একটি শর্তযুক্ত বাক্য। অর্থাৎ বৃষ্টি হওয়ার উপরই নির্ভর করবে আমার বাইরে যাওয়ার বিষয়টা। অথবা যদি বলি-যদি না গাড়ি পাই তাহলে আমি হেঁটে যাবোএটা একটি শর্তযুক্ত বোর্ধক বাক্য। এ ধরনের বাক্যে শর্ত পূরণ হলেই কেবল পরবর্তী কাজটি হয়। If Command টিও এ ধরনের শর্তের উপর ভিত্তি করে কোন Command পরিচালনা করে। একটা কমান্ডের সাথে আরেকটা কমান্ডের কার্যকারিতা নির্ভর করে। Help Command এর মাধ্যমে আমরা হয়তো নিচের মত Command Syntax পাবো। অন্যান্য কমান্ডের মত তেমন বেশি Command Switch নেই। 


Positive Command

Negative Command
IF EXIST filename command
IF [NOT] EXIST filename command
IF ERRORLEVEL number command
IF [NOT] ERRORLEVEL number command
IF string1==string2 command
IF [NOT] string1==string2 command


IF EXIST Command: Command টি খুব সহজ এবং অতী দরকারী। এটার মাধ্যমে DOS এ অনেক কাজ করা যায়। এর মাধ্যমে একটি ফাইলের অস্তিত্ব আছে কি না তা টেস্ট করার পর পরবর্তী কমান্ডটি পালন করা হয়। প্রথমে IF EXIST দিয়ে একটি ফাইলের নাম দিতে হবে। তারপর পরবর্তী কমান্ড দিতে হবে। এর Command Syntax নিচের মত।

Positive Command

Negative Command
IF EXIST filename command

IF [NOT] EXIST filename command


যেমন নিচের কমান্ডদুটি দেখুন। ১ম কমান্ডটিতে hdd.txt ফাইলটি যদি থাকে তাহলে সেটা Delete করার কথা বলা হচ্ছে। hdd.txt ফাইলটি না থাকলে কিন্তু Delete কমান্ডটি কাজ করবে না। একইভাবে ২য় কমান্ডটিতে New.txt নামে কোন ফাইল থাকলে সেটাকে Rename করে hdd.txt করতে বলা হচ্ছে। যদি New.txt নামে কোন ফাইল না থাকে তাহলে Rename Command টি কাজ করবে না।

IF EXIST hdd.txt del hdd.txt
IF EXIST New.txt ren New.txt hdd.txt

এবার নিচের কমান্ডদুটি দেখুন। ১ম কমান্ডটিতে বলা হচ্ছে- hdd.txt নামে কোন ফাইল না থাকলে যেন hdd.txt নামে একটি ফাইল তৈরি হয়। আগে থেকেই যদি hdd.txt নামে ফাইল থাকে তাহলে তৈরি হবে না। একইভাবে ২য় কমান্ডটিতে বলা হচ্ছে hdd.txt নামে যদি কোন ফাইল আগে থেকে না থাকে তাহলে New.txt নামে যে ফাইলটি আছে তা যেন hdd.txt নামে Rename হয়ে যায়।

IF not EXIST hdd.txt echo > hdd.txt
IF not EXIST hdd.txt ren New.txt hdd.txt



IF ERRORLEVEL Command: উপরে ERRORLEVEL বিষয়ে আমরা কিছুক্ষণ আগে যে আলোচনাটি পড়লাম তার বাস্তবায়নই দেখা যাবে এ কমান্ডে। ERRORLEVEL এর উপর ভিত্তি করে কোন কমান্ড পরিচালনা করার জন্য এ কমান্ডটি ব্যবহার করা হয়। এর Command Syntax নিচের মত। প্রথমে IF ERRORLEVEL দিয়ে number দিতে হবে। তারপর পরবর্তী কমান্ড দিতে হবে।


Positive Command

Negative Command
IF ERRORLEVEL number command

IF [NOT] ERRORLEVEL number command

উপরের Command Syntax মত নিচের কমান্ডটি দেখি।
Myapp.exe
IF ERRORLEVEL 0 goto OK
IF ERRORLEVEL 1 goto fail
:OK
    echo Successfully installed.
@pause
exit
: fail
    echo Not installed
@pause
exit

উপরের কমান্ডটি ভাল করে লক্ষ্য করুন। Myapp.exe নামে একটি Program run করতে বলা হচ্ছে। ধরুন- Program টি 0 (Zero) আর 1 (One) দুটি ERRORLEVEL দেবে। 0 মানে সফলভাবে Program টি run হয়েছে। আর 1 মানে সফলভাবে Program টি run হয় নি। উপরের Batch Command টি দিয়ে আমরা সফল বা বিফলের মেসেজটি পাবো। ERRORLEVEL 0 হলে goto কমান্ড OK Level এ নিয়ে যাবে যেখানে সফলতার বার্তা আছে। আবার ERRORLEVEL 1 হলে goto কমান্ড fail Level এ নিয়ে যাবে যেখানে বিফলতার বার্তা আছে।

Myapp.exe
IF not ERRORLEVEL 0 goto fail
echo Successfully installed.
@pause
exit
: fail
echo Not installed
@pause
exit

এবার উপরের কমান্ডটি দেখুন। এর আগের কমান্ডটিকে আমরা অন্যভাবে সাজালাম। Myapp.exe রান হওয়ার পর ২য় কমান্ডটি রান হবে। ২য় কমান্ড চেক করে দেখবে ERRORLEVEL 0 হয়েছে কি না। যদি ERRORLEVEL 0 না হয় তাহলে goto কমান্ডটি প্রয়োগ হবে এবং সেটি fail Level এ নিয়ে যাবে যেখানে বিফলতার বার্তা আছে। আর যদি ERRORLEVEL 0 তাহলে goto কমান্ডটি আর কাজ করবে না। সে ক্ষেত্রে পরবর্তী মেসেজ অর্থাৎ সফলতার মেসেজটি পাওয়া যাবে।



IF String Command: এ কমান্ডটি Menu তৈরির ক্ষেত্রে বেশি ব্যবহৃত হয়। এ কমান্ডের মাধ্যমে দুটি string এর মধ্যে তুলনা করা হয়। যদি দুটি string মিলে যায় তাহলে পরবর্তী কমান্ডটি কাজ করে। এ কমান্ডটি অনেক কমান্ডের সমন্বয়ে তৈরি Batch File এ ব্যবহৃত হয়। এ ধরনের কমান্ডগুলোতে একটা কমান্ডের সাথে আরেকটা কমান্ডের কার্যকারিতা নির্ভর করে। এর Command Syntax নিচের মত।
Positive Command

Negative Command
IF string1==string2 command

IF [NOT] string1==string2 command

আমরা নিচের কমান্ডটি একটু দেখি।
IF x==2 goto about

উপরের কমান্ডটিতে প্রথমে x এবং 2 এর মধ্যে তুলনা করা হবে। যদি x এবং 2 এর মান সমান হয় তাহলে পরবর্তী কমান্ড অর্থাৎ goto কমান্ড কাজ করবে বা goto কমান্ড Level about এ নিয়ে যাবে। x এর মান কোথা থেকে আসবে বা পাওয়া যাবে সেটা Batch File এর অন্যান্য কমান্ডে ঠিক করে দেয়া হবে। উপরের কমান্ডটি নিচের মতও লেখা যায়।

IF x equ 2 goto about

কমান্ডটিতে = চিহ্ন ব্যবহার না করে এর সংক্ষিপ্ত নামটা লেখা হয়েছে। যেমন = মানে Equal যার সংক্ষিপ্ত নাম equ নিচের কমান্ডটি একসাথে errorlevel এবং equ এর উপর নির্ভরশীল।
Myapp.exe
if %errorlevel% equ 0 echo The program is installed successfully.
if %errorlevel% equ 1 echo The program is not installed successfully.

এই Command এ আরো বিভিন্ন শর্ত ব্যবহার করা যায় যাতে বিভিন্ন চিহ্নের বদলে কিছু সংক্ষিপ্ত নাম ব্যবহৃত হয়। নিচে তা উল্লেখ করা হলো।

Short Name
Meaning
EQU
equal
NEQ
not equal
LSS
less than
LEQ
less than or equal
GTR
greater than
GEQ
greater than or equal


দুটি string এর মধ্যে যে সবসময় সমানের শর্ত দেয়া হবে তা কিন্তু নয় বরং আরো বিভিন্ন শর্ত প্রয়োগ করা যায়। যেমন String গুলো সমান যেমন হতে পারে তেমনি সমান নাও হতে পারে। আবার ছোট/বড়ও হতে পারে। তাই দুটি String এর মধ্যে তুলনা করে পরবর্তী কমান্ডটি প্রয়োগ করার জন্য এ কমান্ডটি খুব জরুরী।  বিভিন্ন শর্ত প্রয়োগ করে If Command ব্যবহার করা যায়। নিচে একটি চার্ট দেয়া হলোঃ
Variation
Comparison
if string1 EQU string2
Exactly equal (দুটি string সমান হলে)
if string1 NEQ string2
Not equal (দুটি string সমান না হলে)
if string1 LSS string2
Less than (১ম string ছোট হলে)
if string1 LEQ string2
Less than or equal to (১ম string ছোট বা সমান হলে)
if string1 GTR string2
Greater than (১ম string বড় হলে)
if string1 GEQ string2
Greater than or equal to (১ম string বড় বা সমান হলে)

Command গুলোর সাথে i/ Switch ব্যবহার করা যায়। এর মাধ্যমে ব্যবহৃত string গুলোকে Case-insensitive কি না তা নির্ধারণ করে দেয়া হয়। যেমন i/ Switch ব্যবহার করা হলে বুঝে নিতে হবে String গুলো Case Insensitive অর্থাৎ Small Letter বা Capital Letter দুই হতে পারে। যেমন নিচের কমান্ডটি দেখুন।

Case-sensitive

Case-insensitive
IF x LEQ p goto ping

IF /i x LEQ p goto ping

    


0 মন্তব্য:

একটি মন্তব্য পোস্ট করুন

Comments করার জন্য Gmail এ Sign in করতে হবে।