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


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.