উইন্ডোজ ব্যাচ ফাইলের স্ট্রিংয়ের অংশটি কীভাবে উত্তোলন করতে হয়?


30

ধরুন আমার কাছে "Abc_123" এর মতো একটি মান রয়েছে যা একটি ব্যাচ (সেমিডি) ফাইলের একটি ভেরিয়েবলে সঞ্চিত রয়েছে। আমি একটি ভেরিয়েবলের সাথে শেষ করতে চাই যেখানে কেবল "123" রয়েছে। এটি করার জন্য কোনও অন্তর্নির্মিত উপায় আছে?

যতক্ষণ না এটি একটি সাধারণ উইন্ডোজ (ভিস্তা / ২০০৮) সিস্টেমে অন্তর্নিহিত হয় ততক্ষণ আমি পদ্ধতিটি বা কার্য সম্পাদন সম্পর্কে ভয়াবহভাবে পছন্দ করি না।

উত্তর:


40

সাবস্ট্রিং সিনট্যাক্স ব্যবহার করুন:

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123

4
ব্যাচের ফাইলে সাবস্ট্রিং করার সর্বোত্তম উপায়টি কীভাবেhelp set উল্লিখিত রয়েছে তার সাথে পুরো সিনট্যাক্সটি দেখতে পাচ্ছেন ? স্ট্যাকওভারফ্লোতে
ব্যবহারকারী5910

1
পরিবর্তনশীল ইনপুট হওয়ার জন্য যদি আমার 4 এবং 3 এর দরকার হয় তবে আমি কীভাবে এটি করব? %string:~%start%,%len%%
মাকপো

কিছু মনে করো না. আমি উত্তর খুঁজে পেয়েছি। ss64.com/nt/syntax-substring.html
ম্যাকপো

3
@ মাকপো থেকে লিঙ্কটি সংক্ষিপ্ত করতে: ব্যবহার করুনCALLCALL SET _substring=%%_donor:~%_startchar%,%_length%%%
বাগিবাণী

8

যদি আপনি কেবল আন্ডারস্কোরের পরে সমস্ত কিছু চান (এবং প্রয়োজনীয়ভাবে স্ট্রিংয়ের দৈর্ঘ্য বা আন্ডারস্কোরটি জানেন না তবে কেবল একটি আন্ডারস্কোর থাকার উপর নির্ভর করতে পারেন), চেষ্টা করুন:

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

মূলত, আপনার স্ট্রিংটি ডিলিমিটার (ডিলিমস = _) হিসাবে আন্ডারস্কোর ব্যবহার করে টোকনে বিভক্ত হবে। লুপের জন্য কেবলমাত্র দ্বিতীয়টি (টোকেন = 2) পাস হবে (পরিবর্তনশীল %% এ হিসাবে)। লুপটি কেবল একবারে চলবে যেহেতু আপনি এই ক্ষেত্রে একক স্ট্রিংয়ের সাথে ডিল করছেন।

আপনি যদি আন্ডারস্কোরের আগে এবং পরে উভয় জিনিস সংরক্ষণ করতে চান তবে চেষ্টা করুন:

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)

নোট করুন যে %% একটি বিভাজনের প্রথম টোকেনের জন্য পরিবর্তনশীল; %% বি বিভাজনের দ্বিতীয় টোকেনের জন্য পরিবর্তনশীল।


3

যদি আপনি দেখতে পান যে ব্যাচের ভাষা আপনি যা চান তেমন শক্তিশালী নয় - এবং সম্ভবত আপনাকে এই মুহুর্তে পেতে খুব বেশি সময় লাগবে না - আপনি উইন্ডোজ পাওয়ারশেল ব্যবহার করতে পারেন । এটি উইন্ডোজের সমস্ত সংস্করণে ডিফল্টরূপে ইনস্টল করা হয়নি তবে আপনি এটি নিখরচায় ডাউনলোড করতে পারেন।

আপনি যদি পাওয়ারশেল ভাষা পছন্দ না করেন তবে পার্ল রয়েছে। আপনাকে যদিও এটি সমস্ত সিস্টেমে ইনস্টল করতে হবে। অন্যরাও আছেন।


প্রশ্নটি পাওয়ারশেল বা পার্ল সম্পর্কে জিজ্ঞাসা করছে না
জিম্বা

2
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%

3
এটি বিশেষভাবে কী করে?
পিম্প জুস IT

ওহ, যদি আপনি এই কোডটি কীভাবে কাজ করে তা জিজ্ঞাসা করছিলেন: এটি সংখ্যার আগে সমস্ত কিছুই মুছে ফেলে, এর আগে একটি আন্ডারস্কোর দিয়ে।
জিম্বা

@ জিম্বা কি কেবল "শেষ _" এ প্রসারিত করার উপায় আছে? এছাড়াও আমি কোনও ডকুমেন্টেশনে এটি কোথায় খুঁজে পাব?
TWiStErRob

ঠিক আছে, একটি ডক্স খুঁজে পেয়েছে, উত্তরে যুক্ত হয়েছে। প্রশ্নগুলি এখনও দাঁড়িয়ে আছে: আমি কীভাবে *লোভী করব? আমি একটি ভাল ওল ব্যবহার করেছি IF NOT ... GOTO :replace, তবে আরও ভাল উপায় থাকলে ভাল হত।
TWiStErRob

1
@TWiStErRob: আমি দেখছি। আপনি যদি জানেন না যে _সেখানে কতগুলি রয়েছে, তবে শেষেরটি লুপ করুন, তারপরেset var
জিম্বা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.