আমি কীভাবে একটি সেমিডি ভেরিয়েবল সরিয়ে ফেলব?


89

ধরা যাক আমি সিএমডি শেলটিতে নিম্নলিখিতগুলি সম্পাদন করি:

SET "FOO=bar"

সিএমডি শেলটি পুনর্ব্যবহার করা ছাড়া এই পরিবর্তনশীলটিকে অপরিবর্তিত করার কোনও উপায় আছে কি?


10
আপনি কি আসলেই এমএস-ডস (যা কমপক্ষে 10 বছর বা তার বেশি সময় ধরে মারা গেছে) বোঝাচ্ছেন - বা আপনি এমএস-ডস বলছেন তবে উইন্ডোজ কমান্ড লাইনটি সত্যই বোঝাচ্ছেন cmd.exe??
marc_s

4
সম্ভবত, তবে এটি সেই প্রশ্নের পক্ষে আসলেই কিছু যায় আসে না ...
মাদারার ভূত

4
মার্ক ঠিক আছে। এটি এমএস-ডস শেল নয়। মানুষ কখনও শিখতে পারে না যে এটি একটি বড় পার্থক্য।
মাইকেল-হে

@ মাডারাউচিহ, প্রকৃতপক্ষে, আপনার set var=উত্তরটি এমএস-ডস .2.২২ কমান্ড ডট কমের অধীনে যেমন উইন্ডোজ সেমিডি.এক্সএর অধীনে কাজ করে ঠিক তেমনই কাজ করে। (যাইহোক, উইন্ডোজের বিপরীতে, ভের = এর চারপাশে ডাবল কোট লাগানো কার্যকর নয়, পরিবর্তে এটি একটি পরিবেশের পরিবর্তনশীল তৈরি করে যার নাম ডাবল উদ্ধৃতি দিয়ে শুরু হয়))
সাইমন কিসেন

উত্তর:


137

হ্যাঁ, আপনি এটি দিয়ে আনসেট করতে পারেন

set FOO=

বা স্পষ্টভাবে ব্যবহার:

set "FOO="

নিশ্চিত করুন যে =চিহ্নের পরে কোনও পেছনের বহিরাগত (অদৃশ্য) অক্ষর আসবে না । এটাই:

  • set FOO=থেকে পৃথক set FOO=      

29

ভেরিয়েবলটি আনসেট করার একটি সুরক্ষিত উপায় হ'ল উদ্ধৃতিগুলিও ব্যবহার করা হয়, তারপরে স্থান অনুসরণের ক্ষেত্রে সমস্যা নেই।

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%

11

অন্য পদ্ধতি

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

দ্রষ্টব্য: এটি একটি ইন্টারেক্টিভ কমান্ড প্রম্পটে কাজ করবে না। তবে ব্যাচের স্ক্রিপ্টে কাজ করে।


9

এটি আমার উইন্ডোজ 7 সিএমডি শেলটিতে আমার জন্য কাজ করে:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it

4
setকমান্ডে স্পেসগুলি উল্লেখযোগ্য । আপনি যদি চেষ্টা করেন set FOO = barএবং চেষ্টা করেন set FOO=, তবে এটি 'এফওও' সেট করবে না। কিছু কারণে, যদিও তারা ভিতরে (যেমন?) উল্লেখযোগ্য নয় % %
টেড হপ

পিছনের স্থানটিও গুরুত্বপূর্ণ। সম্পাদনার জন্য দুঃখিত, আমি ভেবেছিলাম আপনার প্রতিনিধি 270 কে, 270 কে ... উফ বলেছে। আমি প্রায়শই উত্তরগুলি সম্পাদনা করি যখন প্রতিক্রিয়ার পরামর্শ দেয় ব্যবহারকারী ফিরে না আসবে। স্পষ্টতই এখানে মামলা হয় না। আমার ভুল.
chappjc

@ চ্যাপজ কোন সমস্যা নেই, সম্পাদনার জন্য ধন্যবাদ! আমি কীভাবে এটি মিস করেছি তা নিশ্চিত নয়।
পেক্কা

4

আমি নীচে শুধুমাত্র একটি মন্তব্য হিসাবে প্রস্তাব করব, তবে আমি মনে করি এটি নিজের পক্ষে দাঁড়ানো যথেষ্ট গুরুত্বপূর্ণ।

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

এটিই এই সমস্যার সমাধান:

SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%

এইভাবে ডাব্লিকেশনগুলিকে ডাবল কোটে মোড়ানো দ্বারা, ব্যবধানের সমস্যাটি পুরোপুরি এড়ানো যায়। মধ্যবর্তী স্থানগুলি নির্মূল করার জন্য সংমিশ্রণ করে যখন ভেরিয়েবলগুলি তৈরি করা হয় তখন এটি সত্যিই কার্যকর হতে পারে - উদাহরণস্বরূপ - পাথ, উদাহরণস্বরূপ:

SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.