ব্যাচের ফাইলে স্ট্রিং প্রতিস্থাপন


102

আমরা নিম্নলিখিত কমান্ডটি ব্যবহার করে একটি ব্যাচ ফাইলে স্ট্রিংগুলি প্রতিস্থাপন করতে পারি

set str="jump over the chair"
set str=%str:chair=table%

এই রেখাগুলি সূক্ষ্মভাবে কাজ করে এবং স্ট্রিংটি "চেয়ারের উপরে লাফিয়ে" "টেবিলের উপরে লাফিয়ে" পরিবর্তন করে। এখন আমি স্ট্রিংয়ের মধ্যে "চেয়ার" শব্দটি কিছু পরিবর্তনশীল দিয়ে প্রতিস্থাপন করতে চাই এবং এটি কীভাবে করব তা আমি জানি না I

set word=table
set str="jump over the chair"
??

কোন ধারনা?



1
প্রথমে কে ছিলেন তা গুরুত্বপূর্ণ নয়, তবে অভিন্ন প্রশ্নগুলি লিঙ্ক করা এবং সর্বাধিক
অপরিশোধনযোগ্য

উত্তর:


79

আপনি ব্যবহার করতে পারেন!, তবে আপনার অবশ্যই অবশ্যই সক্ষম করুন সক্রিয় সুইচ সেট থাকতে হবে।

setlocal ENABLEDELAYEDEXPANSION
set word=table
set str="jump over the chair"
set str=%str:chair=!word!%

4
কিন্তু যদি strনিজেই বিলম্বিত প্রসার থেকে হয়? set str=!str:chair=!word!!সঠিকভাবে কাজ করে না।
কালিরিয়ানহুমন072889

আমি পেতে "jump over the !word!"
bers

88

আপনি নিম্নলিখিত ছোট কৌশল ব্যবহার করতে পারেন:

set word=table
set str="jump over the chair"
call set str=%%str:chair=%word%%%
echo %str%

callসেখানে পরিবর্তনশীল সম্প্রসারণ আরেকটি স্তর ঘটায় এটা প্রয়োজনীয় মূল উদ্ধৃত করা উপার্জন %লক্ষণ কিন্তু এটা সব শেষে কাজ।


আমি এই সমাধানটি পছন্দ করি, স্ট্রিংগুলি অবতরণ করা ব্যাচ ফাইলগুলিতে সর্বদা সমস্যাযুক্ত হয়, ENABLEDELAYEDEXPANSION কেবল চিন্তার জন্য আরও একটি চরিত্র যুক্ত করে।
Anders

9
দ্বারা উপলব্ধ উত্তর সংক্রান্ত গুরুত্বপূর্ণ জিনিস জোয়ি । এটি কাজ করার জন্য আপনার কোডটি ব্যাচ ফাইলে রাখা দরকার। আপনি যদি কেবল কমান্ড লাইনে এটি পরীক্ষা করেন তবে এটি অপ্রত্যাশিতভাবে ফিরে আসবে %"jump over the "word%%%। কেবল সচেতন থাকুন, ব্যাচ ফাইলগুলিতে এবং কমান্ড লাইনে থাকা কোডটি বিভিন্ন ফলাফল আনতে পারে।
দাদি

2
দাদীর স্পট-অন মন্তব্যটি তৈরি করে, কমান্ড লাইনের সমাধানটি এখানে রয়েছে: stackoverflow.com/questions/29944902/…
কেন সেবেস্তা

2
এই উত্তরটিকে প্রাধান্য দেওয়া কারণ এটি উভয় উপায়েই কাজ করে, পরিবেশের পরিবর্তনের সাথে উভয় অবস্থানেই বা "আগে" এবং "পরে" উভয় অবস্থানে: set word=table set str="jump over the chair" call set str=%%str:chair=%word%%% echo %str% set word1=chair set word2=desk set str="jump over the chair" call set str=%%str:%word1%=%word2%%% echo %str%'
টম ওয়ারফিল্ড

0

আমি একটি ফাংশন তৈরি করতে জোয়ের উত্তরটি ব্যবহার করতে সক্ষম হয়েছি:

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

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET "MYTEXT=jump over the chair"
echo !MYTEXT!
call:ReplaceText "!MYTEXT!" chair table RESULT
echo !RESULT!

GOTO:EOF

এবং আপনার ব্যাচ ফাইলের নীচে এই ফাংশনগুলি।

:FUNCTIONS
@REM FUNCTIONS AREA
GOTO:EOF
EXIT /B

:ReplaceText
::Replace Text In String
::USE:
:: CALL:ReplaceText "!OrginalText!" OldWordToReplace NewWordToUse  Result
::Example
::SET "MYTEXT=jump over the chair"
::  echo !MYTEXT!
::  call:ReplaceText "!MYTEXT!" chair table RESULT
::  echo !RESULT!
::
:: Remember to use the "! on the input text, but NOT on the Output text.
:: The Following is Wrong: "!MYTEXT!" !chair! !table! !RESULT!
:: ^^Because it has a ! around the chair table and RESULT
:: Remember to add quotes "" around the MYTEXT Variable when calling.
:: If you don't add quotes, it won't treat it as a single string
::
set "OrginalText=%~1"
set "OldWord=%~2"
set "NewWord=%~3"
call set OrginalText=%%OrginalText:!OldWord!=!NewWord!%%
SET %4=!OrginalText!
GOTO:EOF

এবং মনে রাখবেন যে আপনাকে অবশ্যই আপনার ব্যাচের ফাইলের শীর্ষে "SETLOCAL ENABLEDELAYEDEXPANSION" যুক্ত করা উচিত অন্যথায় এর কোনওটিই সঠিকভাবে কাজ করবে না।

SETLOCAL ENABLEDELAYEDEXPANSION
@REM # Remember to add this to the top of your batch file.

-4

এটি কাজ করে

@echo off    
set word=table    
set str=jump over the chair    
set rpl=%str:chair=%%word%    
echo %rpl%

5
দুঃখিত, এটি দুর্দান্ত দেখাচ্ছে, তবে এটি ভুল! এটি শব্দটি সরিয়ে দেয় এবং শব্দটি chairসংযোজন করে table, তবে এটি দুটি শব্দের বিনিময় করে না। শব্দ প্রতিস্থাপন করার চেষ্টা করুন overসঙ্গে underএবং আপনি পেতেjump the chairunder
Jeb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.