% * থেকে একটি যুক্তি সরান


1

উইন্ডোজ ব্যাচে, আমি% * থেকে এক বা একাধিক নির্দিষ্ট যুক্তি মুছে ফেলতে চাই

উদাহরণস্বরূপ, আমি এই জাতীয় আদেশ থেকে দেবদেবকে সরাতে চাই:

python --dev -c "print 'hello world'"

আমি যে কিভাবে করতে হবে?

@ECHO OFF
setlocal enabledelayedexpansion

set i=0
for %%x in (%*) do (
  IF NOT %%x == --dev (
     set /A i+=1
     set "args[!i!]=%%~x"
     )
)
:: expecting args to be -c "print 'hellow world'"
echo running: python %args%
python %args%

উত্তর:


1

দেখে মনে হচ্ছে আপনি আপনার ব্যাচে অ্যারে স্বরলিপি অনুকরণ করার চেষ্টা করছেন যা বাস্তবে কার্যকর হয় না। আপনি মূলত যা করছেন তা নতুন ভেরিয়েবল তৈরি করছে:

args[0]=--dev

যা আপনার সাথে তারপর কল করতে হবে %args[0]%।

পরিবর্তনশীল সামগ্রী প্রতিস্থাপন

পরিবর্তে, আপনি এই মত পরিবর্তনশীল প্রতিস্থাপন ব্যবহার করতে পারেন:

@ECHO OFF

set args=%*
set args=%args:--dev =%

:: expecting args to be -c "print 'hello world'"
echo running: python %args%
python %args%

এইভাবে আপনার বিলম্বিত প্রসারণ বা forলুপের দরকার নেই।

for লুপ

আপনি যদি নিজের forলুপটি রাখতে চান তবে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

@ECHO OFF
setlocal enabledelayedexpansion

set args=
for %%x in (%*) do (
  IF NOT [%%x] == [--dev] (
     set "args=!args! %%x"
     )
)
:: expecting args to be -c "print 'hello world'"
echo running: python %args%
python %args%

আরও পড়া:


1
একটি ভাল উত্তর, কিন্তু আমি args[]ভেরিয়েবলগুলি ব্যবহার করার বিন্দুটি দেখতে পাচ্ছি না । দ্বিতীয় লুপের প্রয়োজন ছাড়াই set "args= "কেবল প্রথম লুপটিতে কেন শুরু করবেন না set "args=!args! %%~x? আর্গুমেন্ট স্ট্রিংয়ের দুটি প্রধান শূন্যস্থান থাকবে, যা প্রোগ্রামের সময়সূচী লাইনে উপেক্ষা করা হবে।
— এএফএইচ

ভাল যুক্তি. আমি নিশ্চিত না কেন আমি কেন এই আসল forলুপটি আমার মাথায় আটকে গেলাম । আমি আপনার পরামর্শ দিয়ে উত্তর আপডেট করেছি। আমি ব্যবহার করিনি %%~xকারণ এটি প্রয়োজনীয় উদ্ধৃতিগুলি সরিয়ে আর্গুমেন্টগুলি তৈরি করে।
— ওয়ার্থওয়েলে

হ্যাঁ, উদ্ধৃতিগুলি অন্তর্ভুক্ত করা উচিত কিনা তা সম্পর্কে আমি অনিশ্চিত ছিলাম: প্রশ্নকারীর এগুলি বাদ দিয়েছিলেন কারণ আমি একই কাজ করেছি, যদিও আমার প্রবৃত্তিটি অন্তর্ভুক্ত করার ছিল to
— এএফএইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.