সম্মানিত দর্শক আপনাকে স্বাগতম। আমাকে Facebook Google+ এ পাবেন। কামরুলকক্স: Use For, tokens, delims in Batch File

Use For, tokens, delims in Batch File




আমরা ইতিপূর্বে DOS বা Batch File নিয়ে অনেক আলোচনা করেছি। DOS এর কাজ করতে যেমন মজা লাগে তেমনি না বুঝলে খুব জটিল লাগে। এর আগে আমরা DOS এর Basic Command গুলো নিয়ে আলোচনা করেছি। এবার একটি জটিল Command নিয়ে আলোচনা করবো। বুঝতে হলে একটু মনুযোগ দিতে হবে এবং লেখাটা বার বার পড়তে হবে। যারা DOS নিয়ে কাজ করেন তাদের জন্য এটি খুবই গুরুত্বপূর্ণ একটি কমান্ড এবং একবার মাথায় ঢুকলে এটি নিয়ে অনেক কাজ করা যাবে। এখানে আমরা For, tokens, delims বিষয়গুলো নিয়ে আলোচনা করবো এবং এগুলো কোথায় কী কাজে ব্যবহৃত হয় তা দেখবো।

আমরা Notepad দিয়ে Kamrul.txt নামে একটি ফাইল তৈরি করি যার মধ্যে লেখা থাকবে নিচের লাইনটি। ফাইলটি Desktop এ সেভ করুন। 
I am KAMRUL ISALM, like travelling.

উপরের লাইনটিকে আমরা Space বা খালি জায়গা দিয়ে যদি বিভক্ত করি তাহলে আমাদের লাইনটিতে ছয়টি অংশ পাওয়া যায় নিচের মত।
I
am
KAMRUL
ISALM,
like
travelling.
1
2
3
4
5
6
A
B
C
D
E
F
   
উপরের টেবিলে নাম্বার এবং ইংরেজী Letter দিয়ে আমি অংশগুলোকে ভাগ করে দেখিয়েছি। যেখানে ১ম অংশ I এবং শেষের বা ৬ষ্ঠ অংশ travelling.

আবার , (কমা) চিহ্ন দিয়ে যদি লাইনটিকে বিভক্ত করি তাহলে পুরো লাইনটিতে দুটি অংশ পাওয়া যায় নিচের মত।
I am KAMRUL ISALM
like travelling.
1
2
A
B

Space বা খালি জায়গায় দিয়ে বিভক্ত করাতে যেখানে আমাদের লাইনটি ৬টি অংশ বিভক্ত হয়েছিল সেখানে , (কমা) চিহ্ন দিয়ে বিভক্ত করাতে আমাদের লাইনটি দুটি অংশে বিভক্ত হয়েছে যার প্রথম অংশ I am KAMRUL ISALM এবং ২য় অংশ like travelling.


নোটঃ লাইনটিকে প্রথমবার অর্থাৎ উপরে বিভক্ত করেছি Space বা খালি জায়গায় দিয়ে আর নিচে বিভক্ত করেছি , চিহ্ন দিয়ে। যে চিহ্নটা দিয়ে বিভক্ত করা হয় তাকে বলা (Delimiters) বা বিভক্তকারী। আর বিভক্ত হওয়া প্রতিটি অংশই এক একটি tokens মানে উপরের টেবিলে ছয়টি এবং নিচের টেবিলে দুটি tokens রয়েছে।

এখন আমরা Desktop এ একটি Batch ফাইল তৈরি করবো যাতে নিচের Command টি থাকবে। আর উপরের আলোচনা থেকে কমান্ডটি বোঝার চেষ্টা করবো।

FOR /f "tokens=2-3 delims= " %%a IN (Kamrul.txt) DO ECHO %%b

আমরা আগেই বলেছি যে কমান্ডটি জটিল এবং বুঝতে একটু কষ্ট হতে পারে। তাই একটু মনুযোগ দিতে হবেএখানে tokens এবং delims নামে দুটি শব্দ রয়েছে। delims হলো Delimiters এর সংক্ষিপ্ত রূপ। delims এর পর একটি = চিহ্ন দিয়ে কিছুই লেখা হয় নি। এর মানে আমাদের Delimiters হবে Space বা খালি জায়গা। সুতরাং বুঝা যাচ্ছে যে, কমান্ডের মধ্যে Delimiters উল্লেখ করতে হবে। আবার tokens দিয়ে বুঝানো হচ্ছে অংশ। অর্থাৎ tokens=2-3 দিয়ে বুঝানো হচ্ছে Space বা খালি জায়গা দিয়ে বিভক্ত করার পর লাইনটিতে যে কয়টা অংশ হয়েছে তার মধ্যে ২ থেকে ৩ নং অংশ। ২ থেকে ৩ পর্যন্ত দুটি অংশকে ইংরেজী Letter দিয়ে যদি আমরা ক্রমিক করি তাহলে হবে a আর b

যদি tokens=2-3 না দিয়ে tokens=2-5 দেয়া হতো তাহলে ২-৫ পর্যন্ত  চারটি অংশ হতো এবং ইংরেজী Letter দিয়ে ক্রমিক করলে হতো a,b,c,dএর পরে কমান্ডে IN দিয়ে ১ম বন্ধনীর ভিতর একটি ফাইলের নাম (Kamrul.txt) দেয়া আছে। ফাইলটি আমরা শুরুতেই তৈরি করেছিলাম যার ভিতরে I am KAMRUL ISALM, like travelling. লাইনটি আছে। ১ম বন্ধনীর ভিতর Kamrul.txt দেয়ার ফলে Batch Command বুঝে ফেলবে যে I am KAMRUL ISALM, like travelling. লাইনটির কথাই বলা হচ্ছে। সব শেষে রয়েছে %%b যাকে বলা হয় Variable এর মানে হলো tokens=2-3 দিয়ে যে দুটি অংশের কথা বলা হচ্ছে তার মধ্যে ক্রমিক b কেই Call করার কথা বলা হচ্ছে। Variable দিয়ে tokens এর ক্রমিককে অনুসরণ করা হয়যতটা tokens হবে Variable ও হবে ততটাএখানে tokens=2 হচ্ছে am এবং tokens=3 হচ্ছে KAMRULসুতরাং Variable b দিয়ে বুঝাবে KAMRUL tokens গুলো দিয়েও লেখা যায় আবার , দিয়েও লেখা যায়। যেমন tokens=2-3 কে tokens=2,3 ও লেখা যায়।

আবার লক্ষ্য করুন। Desktop এ আমাদের যে ফাইলটি রয়েছে তার মধ্যে I am KAMRUL ISALM, like travelling. লাইনটি রয়েছে। আমরা আমাদের তৈরি Batch File টি দিয়ে পুরো লাইনটিকে যেভাবে ইচ্ছা সেভাবে পড়তে পারবো। ধরুন আমরা পুরো লাইন থেকে শুধু KAMRUL লেখাটা পড়তে চাই। তাহলে কমান্ড হবে নিচের মত।

FOR /f "tokens=2-3 delims= " %%a IN (Kamrul.txt) DO ECHO %%b

উপরের কমান্ডটি আবার লক্ষ্য করুন। আমাদের কমান্ডে আমরা Delims দিয়েছি Space, Tokens দিয়েছি 2-3, File Name হলো Kamrul.txt এবং Variable হবে bঅর্থাৎ Kamrul.txt এর ভিতর যে লাইন রয়েছে সে লাইনটিকে Space বা খালি জায়গায় দিয়ে বিভক্ত করে যে অংশ পাওয়া যায় তার মধ্যে ২ এবং ৩ নং অংশ সিলেক্ট করে ক্রমিকং নং b কে পড়তে হবে। Desktop এ আপনি আপনার মত করে একটি Batch File তৈরি করুন এবং ওখানে উপরের কমান্ডটি দিয়ে প্রাকটিস করুন।

I am KAMRUL ISALM, like travelling.

উপরের লাইনটি থেকে KAMRUL অংশটা পড়ার জন্য Command টিকে বিভিন্নভাবে লেখা যায়। নিচের কমান্ডগুলো সব KAMRUL অংশকেই Call করবে

FOR /f "tokens=3 delims= " %%a IN (Kamrul.txt) DO ECHO %%a
FOR /f "tokens=3-5 delims= " %%a IN (Kamrul.txt) DO ECHO %%a
FOR /f "tokens=2-3 delims= " %%a IN (Kamrul.txt) DO ECHO %%b
FOR /f "tokens=1-3 delims= " %%a IN (Kamrul.txt) DO ECHO %%c

আপনি tokens কিভাবে সাজাচ্ছেন তার উপরই নির্ভর করবে আপনার Variable কী হবে। আমরা নিচে tokens আর Variable পরিবর্তন করে কয়েকটি কমান্ড প্রাকটিস করি। নিচের কমান্ডগুলো আপনার Batch File এ দিয়ে ট্রাই করে দেখুন।

FOR /f "tokens=4 delims= " %%a IN (Kamrul.txt) DO ECHO %%a
FOR /f "tokens=3-5 delims= " %%a IN (Kamrul.txt) DO ECHO %%a %%b
FOR /f "tokens=3,4,5 delims= " %%a IN (Kamrul.txt) DO ECHO %%a %%b
FOR /f "tokens=2-3 delims= " %%a IN (Kamrul.txt) DO ECHO %%b %%a
FOR /f "tokens=1-3 delims= " %%a IN (Kamrul.txt) DO ECHO %%c
FOR /f "tokens=1-6 delims= " %%a IN (Kamrul.txt) DO ECHO %%a %%b %%f
FOR /f "tokens=1-6 delims= " %%a IN (Kamrul.txt) DO ECHO %%f %%c %%d
FOR /f "tokens=* delims= " %%a IN (Kamrul.txt) DO ECHO %%a


এখন আমরা যদি , (কমা) চিহ্নকে Delimiters হিসেবে ব্যবহার করি তাহলে আমাদের tokens হবে দুটা এবং Variable ও হবে দুটো। নিচে কয়েকটি কমান্ড প্রাকটিস করি।

FOR /f "tokens=1 delims=," %%a IN (Kamrul.txt) DO ECHO %%a
FOR /f "tokens=2 delims=," %%a IN (Kamrul.txt) DO ECHO %%a
FOR /f "tokens=1-2 delims=," %%a IN (Kamrul.txt) DO ECHO %%a
FOR /f "tokens=1-2 delims=," %%a IN (Kamrul.txt) DO ECHO %%b
FOR /f "tokens=1-2 delims=," %%a IN (Kamrul.txt) DO ECHO %%a %%b

নোটঃ delims=," এবং delims= " এর দিকে খেয়াল করলে দেখা যাবে প্রথমটিতে = চিহ্নের পর , (কমা) চিহ্ন আছে অর্থাৎ এর Delimiters হলো , (কমা)। কিন্তু পরেরটাতে = চিহ্নের পর কিছুই নেই। কিছুই নেই মানে Delimiters হলো Space বা খালি জায়গা। delims আর tokens দুটোকেই চিহ্ন " দিয়ে বন্ধন করা হয়। আবার একটি কমান্ডে আমি tokens=* ব্যবহার করেছি। এর মানে পুরো লাইনটাই একটা tokens সুতরাং Variable ও হবে একটি। কারণ আমরা আগেই জেনেছি যতটা tokens হবে Variable ও হবে তত। আর tokens যখন * দিয়ে বুঝাবেন তখন delims এর কোন প্রয়োজন নেই। কারণ লাইনটা খন্ড খন্ড ভাগ করতে চায়লেই তখন Delims দরকার। কিন্তু * দেয়া মানে আমরা লাইনটাকে ভাগ বা খন্ড করতে চায় না বরং পুরো লাইনটাই একটি খন্ড।

FOR /f "tokens=1-6 delims= " %%a IN (Kamrul.txt) DO ECHO %%a %%b %%f

Command বিশ্লেষণঃ উপরের কমান্ডটি বিস্তারিত আলোচনা করি এবার। অনেকগুলো ভিন্ন ভিন্ন কমান্ড একসাথে ব্যবহার করার জন্য For ব্যবহার করা হয় tokens, delims নিয়ে উপরে আলোচনা হয়েছে। পরের %%a মানে হলো (Variable Define) আমাদের variable টা কোন অক্ষর দিয়ে শুরু হবে তা Define করাযেমন এখানে আমরা %%a দিয়ে বুঝাচ্ছি আমাদের variable টা a letter দিয়ে শুরু হবে বা প্রথম Variable হবে a এবং পরবর্তী Variable গুলো হবে যথাক্রমে b,c,d,e ইত্যাদি। আমরা চাইলে Variable টাকে অন্য অক্ষর দিয়েও Define করতে পারি। যেমন k দিয়ে যদি Variable টাকে Define করি তাহলে আমাদের প্রথম Variable হবে k এবং পরবর্তী Variable গুলো হবে যথাক্রমে l,m,n,o ইত্যাদি। তখন Variable হিসেবে আমরা b,c,d,e ইত্যাদি বসালে কমান্ড কাজ করবে না। একইভাবে P দিয়ে যদি Variable টাকে Define করি তাহলে আমাদের প্রথম Variable হবে P এবং পরবর্তী Variable গুলো হবে যথাক্রমে q,r,s,t ইত্যাদি। তবে বেশিরভাগ ক্ষেত্রে %%a দিয়েই Variable Define করা হয়। এরপর IN দিয়ে বুঝানো হবে বন্ধনীর ভিতর যা আছে তাকে। এখানে আমরা ফাইলের নাম দিয়েছি। তার মানে কমান্ডগুলো পরিচালিত হবে ফাইলটির উপর ভিত্তি করে। এখানে ফাইলের বদলে আমরা এক বা একাধিক কমান্ডও ব্যবহার করতে পারি। পরবর্তী আলোচনায় আমরা সেটা দেখবো। পরবর্তী DO দিয়ে কমান্ডটি কী কাজ করবে তা বুঝায়। পুরো কমান্ডটি দুটি অংশে বিভক্ত। DO এর আগে এবং পরে। DO এর আগে যা আছে তা হলো শর্ত আর পরে যা আছে তা হলো ফলাফল। অর্থাৎ ১ম অংশে দেয়া শর্তগুলোর উপর ভিত্তি করে পরবর্তী অংশটা ফলাফল হিসেবে দেখাবে। এখানে আমরা ফলাফলের জন্য ব্যবহার করেছি ECHO Command এই কমান্ডটি কোন Text show করার জন্য ব্যবহৃত হয়। কোন Text টি Show করবে এখানে? Variable দিয়ে যেটা বুঝাচ্ছে সেটাই। আর Variable টা নির্ভর করবে আগের দেয়া শর্তগুলোর উপর।


Command: উপরের আলোচনা যদি আমরা বুঝে থাকি তাহলে নিচের কমান্ডগুলোও বুঝবো। নিচের কমান্ডগুলোতে আমরা delims বাদ দিয়ে যেমন কমান্ডগুলো প্রয়োগ করেছি তেমনি delims রেখেও কমান্ডগুলো প্রয়োগ করেছি। Date আর Time এর মত ছোট কমান্ড প্রয়োগ করে আমরা Test করে দেখলাম। এতটুকু বুঝে থাকলে Delims আর Tokens সম্পর্কে যে কোন কমান্ডই আপনাদের বুঝে আসবে।

FOR /F "tokens=*" %%A IN ('TIME /T') DO ECHO. It's %%A Now.
FOR /F "tokens=*" %%A IN ('date /T') DO ECHO. Today is %%A.
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE /T') DO ECHO Today is =%%A
FOR /F "TOKENS=* DELIMS= " %%A IN ('DATE /T') DO ECHO Today is =%%A

নোটঃ উপরে tokens হিসেবে আমি 1 আর * একসাথে বসিয়েছি যেখানে delims হবে Spaceএর মানে delims দিয়ে যে কয়টা ভাগ হয় তার মধ্যে ১ম অংশটা একটা tokens এবং পরে যত অংশ আছে সবগুলো মিলে একটা tokens এছাড়া Bracket এর ভিতর কমান্ডগুলোকে ‘’ চিহ্ন দিয়ে Close করতে হয়। অন্যথায় Command গুলো সঠিকভাবে কাজ নাও করতে পারে।

এবার নিচের কমান্ডটি দেখুন। এটি একটি জটিল কমান্ড। একটি Batch File এ কমান্ডগুলো কপি করে Batch File টি Run করে দেখুন। এটি আপনার Windows এর Install Date & Time দেখাবে এবং systeminfo.txt নামে একটি ফাইল তৈরি করবে যেখানে Batch File টি রান করেছেন সেখানে। systeminfo.txt ফাইলটিতেও আপনার Install Date & Time থাকবে। অনেকগুলো কমান্ড আমি একসাথে যুক্ত করেছি Batch File টিতে।


 
নিচে আরেকটি Batch Command দেয়া হলো। এটি আপনার মাদারবোর্ডের BIOS Vendor & Manufacture Date দেখাবে।


 
নিচের কমান্ডটিও দেখুন। এটি আপনার Motherboard এর Model সহ Manufacturer এর নাম দেখাবে।




এভাবে tokens, delims ব্যবহার করে অসংখ্য গুরুত্বপূর্ণ কাজ করা যায়।


0 মন্তব্য:

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

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