ERRORLEVEL 0 এ সেট করা হচ্ছে


14

আমার একটি ব্যাচ ফাইল রয়েছে যা একটি ইনস্টলারের চারপাশে মোড়ক। এই ব্যাচ ফাইলটি ইনস্টলার দ্বারা ফিরে আসা ত্রুটি স্তরটি পরীক্ষা করে এবং সেই অনুযায়ী মুদ্রণ করে।

আমি লক্ষ্য করেছি যে আমি যদি set ERRORLEVEL=0ব্যাচ ফাইলটি (একই কমান্ড উইন্ডো / এনভায়রনমেন্টে) লাথি মারার ঠিক আগে কমান্ড প্রম্পটে কার্যকর করি তবে ইনস্টলারটি ত্রুটি-বিহীনতায় কখনই মেসেজ করে না এবং আমার ব্যাচের স্ক্রিপ্ট সর্বদা পাস করে দেয়। আমি ধরে নেব %ERRORLEVEL%উইন্ডোজ দ্বারা নির্ধারিত একটি পরিবর্তনশীল এবং প্রোগ্রাম এবং স্ক্রিপ্ট থেকে ত্রুটিগুলি মুদ্রণ করতে এবং ব্যাচের ফাইল বা অন্য কোনও কিছুতে ভেরিয়েবলটি ব্যবহার করা 'নিজের ঝুঁকিতে' হতে পারে বলে বিশেষভাবে ব্যবহৃত হয় কারণ এটি যে কোনও মুহুর্তে পরিবর্তিত হতে পারে অন্য প্রক্রিয়া

যা দেখে মনে হচ্ছে তা থেকে, যখন আমি প্রদত্ত পরিবেশে ত্রুটিযুক্ত স্তর সেট করি, এটি তখন কোনওভাবে প্রস্থান কোডের ধারক হিসাবে ত্রুটিযুক্ত ব্যবহার বন্ধ করে দেয়। কেউ কি জানো এটা কেন? আমার কাছে এটির কেবল অদ্ভুত অপ্রত্যাশিত আচরণ। বিষয় সম্পর্কে যে কোনও তথ্য প্রশংসিত হবে!


উত্তর:


14

আপনি সিস্টেমের পরিবর্তনশীলটিকে একটি নিয়মিত হিসাবে পুনরায় সংজ্ঞা দিচ্ছেন। আপনি যখন এটি করেন, কমান্ড সেশনটি বন্ধ না হওয়া পর্যন্ত সিস্টেম এটি ব্যবহার করবে না।

ভাল উপায় ব্যবহার করা হবে

exit /b 0

অন্য ব্যাচের ফাইলে এবং এটিকে আপনার প্রাথমিক স্ক্রিপ্ট থেকে কল করুন। যেখানে 0 নম্বরটি আপনার পছন্দসই errorlevel। হয় যেটি বা আপনার errorlevelজন্য পুনরায় সেট করা কমান্ড ব্যবহার করুন , যেমন প্রতিধ্বনি, ফাইন্ডস্টার ইত্যাদি

উদাহরণস্বরূপ নীচের কমান্ডগুলি সমস্ত ERRORLEVELআপনার ব্যাচ-ফাইলের মধ্যে 0 তে সেট করা থাকবে :

VERIFY > nul

cmd /c "exit /b 0"

ver > nul     

2
প্রায় সঠিক। গতিশীল ERRORLEVEL ব্যবহার করতে আপনি "সিস্টেম" পেতে কেবল কোনও ব্যবহারকারীর সংজ্ঞায়িত মানটি ব্যবহার করে সংজ্ঞায়িত করতে পারেনset "errorlevel="
dbenham

উইন্ডোজ কেন কাউকে একটি সিস্টেম ভেরিয়েবলকে নিয়মিত রূপান্তর করতে দেয়? উভয় সংজ্ঞা এখনও বিদ্যমান, এর ঠিক প্রতিধ্বনি এবং এই জাতীয় কমান্ডগুলি এখন নিয়মিতকে নির্দেশ করে? সুতরাং প্রোগ্রামগুলি এখনও সিস্টেম ভেরিয়েবল আপডেট করতে পারে, এটি কেবল কমান্ড প্রম্পটের মাধ্যমে অ্যাক্সেসযোগ্য নয়?
user972276

1
"হয় বা এটি একটি কমান্ড ব্যবহার করুন যা আপনার জন্য ত্রুটি-বিভক্তকরণ পুনরায় সেট করে, যেমন প্রতিধ্বনি, সন্ধানকারী ইত্যাদি etc." প্রতিধ্বনি কমান্ড ত্রুটিযুক্ত ভেরিয়েবলটিকে পুনরায় সেট করে না
এপ্রিশ্ট হয়েছে

অন্যরা যেমন বলেছে, errorlevel ভেরিয়েবলটি যদি ব্যবহারকারী / ব্যাচ দ্বারা "ম্যানুয়ালি" সেট করা থাকে "set errorlevel=0"তবে errorlevelভেরিয়েবলটি প্রস্থান কোডটি আর প্রতিফলিত করবে না, তবে আপনি এখনও প্রস্থান কোডটি অ্যাক্সেস করতে পারবেন if errorlevel do something
কেভিন ফেগান

(1) আরও সাধারণ প্রশ্ন হ'ল "আমি কীভাবে কিছু স্বেচ্ছাসেবীর মান যেমন 42 হিসাবে ERRORLEVEL সেট করব?"  cmd /c exit 42 এটি সেরা উত্তর বলে মনে হচ্ছে। (২) ডাবেনহাম যেমন  উল্লেখ করেছেন , আপনার  /bবা উদ্ধৃতিগুলির দরকার নেই।
স্কট

12

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

set "errorlevel="

আপনি 0 errorlevel বাধ্য করতে চান, তাহলে আপনি এই সম্পূর্ণভাবে অ স্বজ্ঞাত, কিন্তু খুব কার্যকর সিনট্যাক্স ব্যবহার করতে পারেন: (call )। কল করার পরে স্থানটি গুরুত্বপূর্ণ। আপনি যদি ত্রুটিটি 1 এ সেট করতে চান তবে আপনি ব্যবহার করতে পারেন (call)। কল করার পরে কোনও স্থান না থাকা সমালোচনামূলক।

(call)
echo %errorlevel%
(call )
echo %errorlevel%

ত্রুটিমুক্ত সেট করার জন্য আরও স্বজ্ঞাত, তবে কম সুবিধাজনক পদ্ধতি হ'ল ব্যাচের ফাইলে একটি ডেডিকেটেড সাবরুটিন ব্যবহার করা:

call :setErr 1
echo %errorlevel%
call :setErr 0
echo %errorlevel%
exit /b

:setErr
exit /b %1

অথবা যদি কমান্ড লাইনে থাকে তবে আপনি ব্যবহার করতে পারেন

cmd /c exit 1
echo %errorlevel%
cmd /c exit 0
echo %errorlevel%

8

আমি ব্যক্তিগতভাবে এটি ব্যবহার:

cd .

এমনকি ইউনিক্স শেলের মধ্যেও কাজ করে।


তবে, এটি কিছুটা দ্রুত হতে পারে: type nul>nulকারণ প্রসেস মনিটর পিএস- QueryDirectoryতে কলগুলি দেখায় cd .: cd .ইউনিক্স শেলের আরও একটি দুর্দান্ত পার্শ্ব প্রতিক্রিয়া রয়েছে। এটি মুছে ফেলার আগে খোলা থাকলে এটি টার্মিনালে পুনর্নির্বাচিত ওয়ার্কিং ডিরেক্টরিটি পুনরুদ্ধার করে।
অ্যান্ড্রি

2

ErrorLevelরাষ্ট্রটি পুনরায় সেট করার কিছু অন্যান্য উপায় এখানে দেওয়া হয়েছে , যা এমনকি এমএস-ডস-এও কাজ করে (অন্তত .2.২২ সংস্করণে):

more < nul > nul

rem // The `> nul` part can be omitted in Windows but is needed in MS-DOS to avoid a line-break to be returned:
sort < nul > nul

নিম্নলিখিত পদ্ধতিগুলি কেবল এমএস-ডস-এ কাজ করে:

command /? > nul

fc nul nul > nul

সম্পূর্ণতার স্বার্থে, এটি ErrorLevelরাষ্ট্রকে সেট করে 1, উইন্ডোজ এবং এমএস-ডস উভয়ের জন্যই বৈধ:

< nul find ""

1

এটিই আমি খুঁজে পেয়েছি যা কাজ করে।

call (exit /b 0)

এটি এমন স্ক্রিপ্টে দরকার যা তৃতীয় পক্ষের স্ক্রিপ্ট ব্যবহার করে যা ERRORLEVEL সনাক্ত করে তবে ত্রুটি স্তরটিকে সঠিকভাবে পুনরায় সেট করছে না।


0

এগুলিও কাজ করবে: (ত্রুটিযুক্তকরণ সেট 1 এ)

পদ্ধতি 1

color 00

পদ্ধতি 2

echo A | find "B"

আপনি এটিকে ত্রুটিমুক্ত 1-26 সেট করতেও ব্যবহার করতে পারেন:

echo Your errorlevel<sup>th</sup> character between A-Z | choice /c:Enter A-Z here /n
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.