MS DOS এ যত গুরুত্বপূর্ণ DOS
Command Line রয়েছে তম্মধ্যে IF
Command একটি। এটি ছাড়া একটি
জটিল Batch File বলতে গেলে
পূর্ণতা পায় না বা সম্পূর্ণ করা যায় না। IF Command দিয়ে সাধারণত তিনটি কাজ করা যায়।
যেমন-(১) এটি কোন ফাইলের অস্তিত্ব আছে কি না তা বের করে, (২) দুটি String এর মান বা Value চেক করে দেখে
এবং (৩) এটি কোন Command এর Error level নির্ণয় করে। আমরা Help 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 এর ব্যাপারে
একটি ধারণা পাওয়া গেছে।
উপরের
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 তৈরির ক্ষেত্রে বেশি ব্যবহৃত হয়।
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
স্কুল
জীবনে 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 করতে হবে।