ব্যাচের ফাইলগুলিতে আমার কোন মন্তব্য শৈলী ব্যবহার করা উচিত?


284

আমি কিছু ব্যাচ ফাইল লিখছি, এবং আমি এই ব্যবহারকারী গাইড , যা বেশ তথ্যবহুল হয়েছে মধ্যে দৌড়ে । একটি জিনিস যা আমাকে দেখিয়েছিল তা হ'ল লাইনগুলি কেবল সাথেই নয় REM, সাথেও মন্তব্য করা যায় ::। এটা বলে:

ব্যাচ কোডে মন্তব্যগুলি একটি ডাবল-কোলন ব্যবহার করে তৈরি করা যেতে পারে, এটি আরইএম কমান্ড ব্যবহার করার চেয়ে ভাল কারণ লেবেলগুলি পুনঃনির্দেশের চিহ্নগুলির আগে প্রক্রিয়া করা হয়। ::<remark>কোনও সমস্যা সৃষ্টি করে না তবে rem <remark>ত্রুটি সৃষ্টি করে।

তাহলে কেন, বেশিরভাগ গাইড এবং উদাহরণগুলি আমি দেখতে পাচ্ছি REM? কি ::উইন্ডোজ সমস্ত সংস্করণের উপর কাজ করে?


3
কেবল রেকর্ডের জন্য, আমি যখন সমস্যাগুলি দেখেছি যখন উইন্ডোজ 98 এর অধীনে পুনর্নির্দেশের সাথে একটি লাইন মন্তব্য করতে "আরইএম" ব্যবহার করা হয়।
ডিগার

6
@ Digger এর মন্তব্যের সাথে একত্রে: লিঙ্কযুক্ত গাইডটি ডস ( command.exe) এর জন্য, না cmd.exe, উইন্ডোজ 2000-তে পাওয়া এনটি কমান্ড প্রসেসরের হিসাবে। rem <remark>শেষের দিকে ঠিক কাজ করে ( কমপক্ষে উইন্ডোজ এক্সপি থেকে), এবং REMএটি অফিসিয়াল কনস্ট্রাক্ট এবং সামগ্রিকভাবে নিরাপদ পছন্দ; যদিও ::এর সুবিধাগুলি রয়েছে, এটি শেষ পর্যন্ত একটি হ্যাক যা (…)ব্লকের ভিতরে সমস্যাযুক্ত (যেমনটি এখানে অনেক উত্তরে আলোচনা করা হয়েছে)।
mklement0


1
সুতরাং, আরইএম এর সাথে কোন পরিস্থিতি ঠিক ত্রুটি ঘটায়?
টিএস

উত্তর:


360

tl; dr: REM ব্যাচ ফাইলগুলিতে মন্তব্য এম্বেড করার নথিভুক্ত এবং সমর্থিত উপায়।


::মূলত একটি ফাঁকা লেবেল যা কখনই লাফানো যায় না, যদিও REMএকটি আসল কমান্ড যা কিছুই করে না। উভয় ক্ষেত্রেই (অন্তত উইন্ডোজ 7 এ) পুনর্নির্দেশ অপারেটরগুলির উপস্থিতি একটি সমস্যার কারণ করে না।

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


এখানে একটি উদাহরণ যেখানে লুপে ::সমস্যা তৈরি হয় FOR

এই উদাহরণটি আপনার ডেস্কটপে ডাকা একটি ফাইলে কাজ করবে নাtest.bat :

@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
    ::echo hello>C:\Users\%username%\Desktop\text.txt
)
pause

যদিও এই উদাহরণটি সঠিকভাবে একটি মন্তব্য হিসাবে কাজ করবে:

@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
    REM echo hello>C:\Users\%username%\Desktop\text.txt
)
pause

কোনও ফাইলের মধ্যে আউটপুট পুনর্নির্দেশের চেষ্টা করার সময় সমস্যাটি দেখা দেয়। আমার সর্বোত্তম অনুমান যে এটি ::একটি পালানো লেবেল হিসাবে ব্যাখ্যা করা হচ্ছে :echo


1
@ ফরেডান: ব্যাচের ফাইলের নাম এবং তার অবস্থানটি কি প্রাসঙ্গিক (ফাইলের নাম এবং অবস্থানের সাথে ফাইলটিতে পুনর্নির্দেশের জন্য?) যেতে পারে? অন্যথায় উদাহরণটি সহজ করে তুলতে ভালো লাগবে।
জোয়

15
দুর্দান্ত স্পর্শে একটি টিএল যোগ করুন; ডাঃ
মকোশিচি

2
লাইনে যদি ভেরিয়েবলের ব্যবহার বিলম্বিত হয় তবে :: কিছু ত্রুটি বার্তাগুলির কারণ ঘটবে, যেমন নির্দিষ্ট ডিস্ক ড্রাইভারটি খুঁজে পাচ্ছে না ..... সুতরাং আরএমই আরও ভাল ব্যবহার করুন।
স্কট চু

2
:: মন্তব্য পার্স করা হয়েছে, এবং বিশেষ অক্ষর> | মন্তব্যটি শেষ করুন এবং নীচের পাঠ্যটি মন্তব্য করা হয়নি।
মোশ

4
@ মোশ ঠিক বলেছেন উদাহরণস্বরূপ, %VAR%ভেরিয়েবলগুলি প্রসারিত হয়। মনে করুন আপনার (ভুলভাবে) set TARGET=C:\Program Files (x86)\"foo.exe", এবং একটি DO(..)অভিব্যক্তির ভিতরে আপনি :: echo %TARGET%একটি ত্রুটি পাবেন কারণ পুরো এক্সপ্রেশনটি মূল্যায়ন হওয়ার আগেই(x86) প্রসারিত হয়ে যায়, এটি একটি অবৈধ DO(..)অভিব্যক্তি এবং খুব অব্যক্ত ত্রুটির দিকে পরিচালিত করে (এই ক্ষেত্রে "মাইক্রোসফ্ট এই সময়ে অপ্রত্যাশিত ছিল " )। এমনকি আপনার প্রয়োজন |বা >আপনার মত প্রকাশের প্রয়োজন নেই। একজন ::না একটি বাস্তব মন্তব্য, হয় REM, যদিও।
আবেল

161

আরইএম এর সাথে মন্তব্য

একটি REM, একটি সম্পূর্ণ লাইন, এছাড়াও লাইন শেষে একটি একাধিক লাইন ক্যারেট লক্ষ্য করতে পারেন এটি প্রথম টোকেন শেষ না।

REM This is a comment, the caret is ignored^
echo This line is printed

REM This_is_a_comment_the_caret_appends_the_next_line^
echo This line is part of the remark

কিছু অক্ষর দ্বারা অনুসরণ করা আরইএম .:\/=কিছুটা আলাদা কাজ করে, এটি কোনও অ্যাম্পারস্যান্ড মন্তব্য করে না, তাই আপনি এটি ইনলাইন মন্তব্য হিসাবে ব্যবহার করতে পারেন।

echo First & REM. This is a comment & echo second

কিন্তু মত বিদ্যমান ফাইলগুলির সাথে সমস্যা এড়ানোর জন্য REM, REM.batবা REM;.batশুধুমাত্র একটি পরিবর্তিত বৈকল্পিক ব্যবহার করা উচিত।

REM^;<space>Comment

এবং চরিত্রের ;জন্য একটি অনুমোদিত;,:\/=

আরইএম তুলনায় প্রায় 6 গুণ ধীর:: (উইন 7 এস 1 এ 100000 মন্তব্য লাইনের সাথে পরীক্ষিত)।
একটি সাধারণ ব্যবহারের জন্য এটি গুরুত্বপূর্ণ নয় (58µ বনাম 360µ কমেন্ট লাইনে)

এর সাথে মন্তব্যসমূহ ::

একটি ::সর্বদা একটি লাইন শেষ ক্যারেট চালায়

:: This is also a comment^
echo This line is also a comment

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

সঙ্গে ECHO ONএকটি REMলাইন দেখানো হয়, কিন্তু না একটি লাইন দিয়ে মন্তব্য::

উভয়ই সত্যই বাকী লাইনের বাইরে মন্তব্য করতে পারে না, সুতরাং একটি সরল %~একটি বাক্য গঠন ত্রুটি ঘটায়।

REM This comment will result in an error %~ ...

তবে আরএমই বিশেষ চরিত্রের ধাপটি সম্পন্ন করার আগেই প্রাথমিক পর্যায়ে ব্যাচ পার্সার থামাতে সক্ষম হয়।

@echo ON
REM This caret ^ is visible

কমান্ড লাইনের শেষে একটি মন্তব্য যুক্ত করতে আপনি & আরইএম বা & :: ব্যবহার করতে পারেন । এই পদ্ধতিটি কাজ করে কারণ '&' একই লাইনে একটি নতুন কমান্ড প্রবর্তন করে।

শতাংশ লক্ষণ সহ মন্তব্যসমূহ = = মন্তব্য =%

শতাংশ লক্ষণ সহ একটি মন্তব্য শৈলী বিদ্যমান।

বাস্তবে এগুলি ভেরিয়েবল তবে এগুলি কিছুতেই প্রসারিত হয় না।
তবে সুবিধাটি হ'ল এগুলি একই লাইনে স্থাপন করা যেতে পারে, এমনকি ছাড়াই &
সমান চিহ্নটি নিশ্চিত করে যে এই ধরণের পরিবর্তনশীল উপস্থিত থাকতে পারে না।

echo Mytest
set "var=3"     %= This is a comment in the same line=%

শতাংশ শৈলী ব্যাচ ম্যাক্রোগুলির জন্য প্রস্তাবিত, কারণ এটি রানটাইম আচরণটি পরিবর্তন করে না, কারণ ম্যাক্রো সংজ্ঞায়িত করা হলে মন্তব্য সরানো হবে।

set $test=(%\n%
%=Start of code=% ^
echo myMacro%\n%
)

2
এটা লক্ষনীয় যে %=মন্তব্য, উদ্ধৃতি চিহ্নের সঙ্গে খুঁতখুঁতে হয় অর্থাত set foo=bar %=bazফলাফল fooবিস্তৃত bar %=baz, ঠিক যেমন set foo="bar" %=bazশুধুমাত্র যেহেতু, set "foo=bar" %=bazফলাফল fooবিস্তৃত barহিসাবে উদ্দীষ্ট।
লাস্টস্টার 7007

3
@ লাস্টস্টার 700: সর্বদা উদ্ধৃতি শৈলী ব্যবহার set "foo=bar"করা সাধারণভাবে সুপারিশ করার মতো, কারণ এটি সর্বাধিক শক্তিশালী ফর্ম যা স্পষ্টভাবে মানটি সীমাবদ্ধ করে। আপনার যে সমস্যা বর্ণনা করছি সহজাত setএর আচরণ, এবং নির্দিষ্ট না %= … =%মন্তব্য: যদি না আপনি ব্যবহার "var=val"উদ্ধৃত, setসবকিছু যে অনুসরণ করে বিবেচনা =(লাইন শেষে মাধ্যমে হোয়াইটস্পেস trailing বা, যদি প্রযোজ্য হয় সহ মান, শুরুর পরবর্তী ইনলাইন কমান্ড)।
mklement0

28

আরেকটি বিকল্প হ'ল মন্তব্যটি একটি পরিবর্তনশীল প্রসার হিসাবে প্রকাশ করা যা সর্বদা কিছুতেই প্রসারিত হয় না।

পরিবর্তনশীল নামগুলি =অননুমোদিত ডায়নামিক ভেরিয়েবল
%=ExitCode%এবং এর মত বাদে থাকতে পারে %=C:%। কোনও ভেরিয়েবলের নাম =1 ম পজিশনের পরে থাকতে পারে না । সুতরাং আমি মাঝে মাঝে বন্ধনীযুক্ত ব্লকের মধ্যে মন্তব্যগুলি অন্তর্ভুক্ত করার জন্য নিম্নলিখিতগুলি ব্যবহার করি:

::This comment hack is not always safe within parentheses.
(
  %= This comment hack is always safe, even within parentheses =%
)

ইন-লাইন মন্তব্য অন্তর্ভুক্ত করার জন্য এটি একটি ভাল পদ্ধতি

dir junk >nul 2>&1 && %= If found =% echo found || %= else =% echo not found

শীর্ষস্থানীয় =প্রয়োজনীয় নয়, তবে আমি প্রতিসাম্যের জন্য পছন্দ করি।

দুটি বিধিনিষেধ আছে:

1) মন্তব্য থাকতে পারে না %

2) মন্তব্য থাকতে পারে না :


হাঃ হাঃ হাঃ! এটিকে একটি বড় আকারের পরিবর্তনশীল করুন! জিনিয়াস! %=ExitCode%? ঝরঝরে। প্রতিদিন নতুন কিছু শিখুন!
জেমস কে

আপনি বোঝাচ্ছেন যে অনুসরণ =করা প্রয়োজনীয়। তবে তা মনে হয় না।
জেমস কে

4
@ জেমসেকে - আমি ট্রেলিংটি ব্যবহার করি =যাতে% = এক্সিটকোড =% এর মতো কিছু একটি "মন্তব্য" হয় এবং ডায়নামিক ভেরিয়েবল নয়। আমি এমন স্টাইল ব্যবহার করতে পছন্দ করি যা সর্বদা কাজ করে (অবশ্যই উত্তরের নীচে বর্ণিত সীমাবদ্ধতা বাদে)।
dbenham

দেখুন stackoverflow.com/a/20169219/1689714 গতিশীল ভেরিয়েবল একটি অন্বেষণ জন্য (যেমন% = ExitCode%% = ExitCodeAscii%% = সি:%% = ডি:%% __ সিডি __% ইত্যাদি), তারা যা বলতে চাচ্ছি, কিভাবে তারা ইত্যাদি সেট করা আছে ..
কাইরন হার্ডি

25

আমি বুঝতে পেরেছি যে আমি ::মন্তব্য করতে এবং মন্তব্য করার জন্য লেবেলটি ব্যবহার করতে পারি REMঠিক আমার কাছে সাদামাটা দেখায়। হিসেবে উল্লেখ করা হয়েছে ডাবল কোলন সমস্যা সৃষ্টি করতে পারে যখন ব্যবহৃত ভিতরে ()কোড অবরুদ্ধ, কিন্তু আমি একটি কাজ-অ্যারাউন্ড লেবেলের মধ্যে পর্যায়ক্রমে দ্বারা আবিষ্কার করেছি ::এবং:space

:: This, of course, does
:: not cause errors.

(
  :: But
   : neither
  :: does
   : this.
)

এটি কুরুচিপূর্ণ নয় REMএবং আসলে আপনার কোডটিতে একটি সামান্য স্টাইল যুক্ত করে।

সুতরাং আমি যে কোড ব্লকগুলি ব্যবহার ::করি তার বাইরে এবং সেগুলির মধ্যে আমি ::এবং এর মধ্যে বিকল্প করি :

যাইহোক, আপনার ব্যাচের ফাইলের শিরোনামের মতো মন্তব্যগুলির বৃহত আকারের জন্য, আপনি কেবলমাত্র gotoনিজের মন্তব্যগুলিতে ইঙ্গিত করে বিশেষ কমান্ড এবং অক্ষরগুলি সম্পূর্ণ এড়াতে পারবেন । এটি যদি আপনি চান এমন কোনও পদ্ধতি বা মার্কআপের শৈলীটি ব্যবহার করতে দিন, যদিও সত্য যদি CMDকখনও সেই লাইনের প্রসেস করার চেষ্টা করা হয় তবে এটি হিস্টি ছুঁড়ে ফেলবে।

@echo off
goto :TopOfCode

=======================================================================
COOLCODE.BAT

Useage:
  COOLCODE [/?] | [ [/a][/c:[##][a][b][c]] INPUTFILE OUTPUTFILE ]

Switches:
       /?    - This menu
       /a    - Some option
       /c:## - Where ## is which line number to begin the processing at.
         :a  - Some optional method of processing
         :b  - A third option for processing
         :c  - A forth option
  INPUTFILE  - The file to process.
  OUTPUTFILE - Store results here.

 Notes:
   Bla bla bla.

:TopOfCode
CODE
.
.
.

কি কখনও স্বরলিপি ইচ্ছা ব্যবহার করুন *'র, @এর ইত্যাদি


আপনি /?এই মেনুটি মুদ্রণ করতে স্যুইচটি কীভাবে পরিচালনা করবেন ?
হোয়াং

1
@ হোয়াং সেটলোকল এনএলবিডিএলএইডিএক্সপেনশন << NEWLINE> সেট ভার =% ~ 1 <নিউলাইনে> প্রতিধ্বনিত প্রথম পরম% 1 <NEWLINE> যদি! VAR! == "/?" (এতে যান ব্যবহার) <দিন NEWLINE>:, USAGE <দিন NEWLINE> প্রতিধ্বনি বাজে বাজে কথা .. <দিন NEWLINE>
GL2014

16
আপনি যখন কোনও সারি orোকান বা মুছবেন তখন একক এবং ডাবল কলোনের বিকল্প হওয়া অবশ্যই মাথা ব্যথা হতে হবে।

@ GL2014 মূলত আপনি বলছেন "আপনি এই মেনুটি প্রিন্ট করেন না "। আপনার উদাহরণ কোডটির ব্যবহার নোটের প্রতিটি লাইনে প্রতিধ্বনি প্রয়োজন। জেমস কে এর উত্তরটি এমনভাবে বিভ্রান্তিমূলক করছে যে এটি প্রস্তাবিত ব্যবহারের নোটগুলি লিখিতভাবে মুদ্রণের জন্য কিছু উপায় রয়েছে।
টিম্বো

1
@ টিম্বো আমি এই উত্তরের:PrintHelp জন্য একটি সাবরুটিন ( ) লিখেছিলাম যা সত্যই @ হোয়াং যা চাইবে তা করে। আমি <HELP> এবং </HELP> চিহ্নিতকারী হিসাবে ব্যবহার করি তবে আপনি যা খুশি তা ব্যবহার করতে পারেন।
cdlvcdlv

21

এই উত্তরটি এই পৃষ্ঠায় অনেক দুর্দান্ত উত্তরের একটি ব্যবহারিক সংক্ষিপ্তসার চেষ্টা করে:

জেবের দুর্দান্ত উত্তরটি বিশেষভাবে উল্লেখের দাবিদার, কারণ এটি সত্যই গভীরতর হয় এবং অনেকগুলি প্রান্তের কেসগুলি কভার করে।
উল্লেখযোগ্যভাবে, তিনি উল্লেখ করেছেন যে একটি ভুল বিধিবিধানের পরিবর্তনশীল / পরামিতি রেফারেন্স যেমন নীচের যে কোনও সমাধানকে %~ভেঙে ফেলতে পারে - লাইনগুলি সহREM


পুরো লাইন মন্তব্য - একমাত্র সরাসরি সমর্থিত স্টাইল:

  • REM(বা এর ক্ষেত্রে তারতম্যগুলি) হ'ল একমাত্র অফিসিয়াল মন্তব্য গঠন এবং এটি সবচেয়ে নিরাপদ পছন্দ - জয়ের সহায়ক উত্তরটি দেখুন

  • ::এটি হ'ল (বহুল ব্যবহৃত) হ্যাক , এতে রয়েছে উপকার ও বিধি :


আপনি যদি ব্যবহার করতে চান তবে আপনার:: এই পছন্দগুলি রয়েছে:

  • উভয় ক্ষেত্রেই : নিরাপদ হতে, ভিতরে একটি ব্যতিক্রম করা (...)ব্লক এবং ব্যবহার REMআছে, বা স্থান মন্তব্য না ভিতরে (...) পুরাপুরি।
  • বা : ভিতরে নিরাপদ ব্যবহারের জন্য বেদনাদায়ক সীমাবদ্ধ নিয়মগুলি::(...) মুখস্ত করুন , যা নিম্নলিখিত স্নিপেটে সংক্ষিপ্তসারিত:
@echo off

for %%i in ("dummy loop") do (

  :: This works: ONE comment line only, followed by a DIFFERENT, NONBLANK line.
  date /t

  REM If you followed a :: line directly with another one, the *2nd* one
  REM would generate a spurious "The system cannot find the drive specified."
  REM error message and potentially execute commands inside the comment.
  REM In the following - commented-out - example, file "out.txt" would be
  REM created (as an empty file), and the ECHO command would execute.
  REM   :: 1st line
  REM   :: 2nd line > out.txt & echo HERE

  REM NOTE: If :: were used in the 2 cases explained below, the FOR statement
  REM would *break altogether*, reporting:
  REM  1st case: "The syntax of the command is incorrect."
  REM  2nd case: ") was unexpected at this time."

  REM Because the next line is *blank*, :: would NOT work here.

  REM Because this is the *last line* in the block, :: would NOT work here.
)

অন্যান্য মন্তব্য শৈলীর অনুকরণ - ইনলাইন এবং মাল্টি-লাইন:

মনে রাখবেন যে এই স্টাইলগুলির কোনওটিই সরাসরি ব্যাচের ভাষা দ্বারা সমর্থিত নয়, তবে অনুকরণ করা যায়


ইনলাইন মন্তব্য :

* নীচের কোড স্নিপেটগুলি verএকটি স্বেচ্ছাসেবক কমান্ডের জন্য স্ট্যান্ড-ইন হিসাবে ব্যবহার করে , যাতে পরীক্ষার সুবিধার্থে হয়। কমান্ডগুলি ইনলাইন মন্তব্যে সঠিকভাবে কাজ
করতে SET, name=valueঅংশটি ডাবল করুন ; যেমন SET "foo=bar",। [1]

এই প্রসঙ্গে আমরা দুটি উপ-প্রকারের পার্থক্য করতে পারি:

  • ইওএল মন্তব্য ([টু-লাইন-অব-লাইন)), যা কমান্ডের পরে স্থাপন করা যেতে পারে এবং লাইনটির শেষ প্রান্তে (আবার, জেবের উত্তরের সৌজন্যে ) প্রসারিত হতে পারে :

    • ver & REM <comment>REMএকটি বৈধ কমান্ড এবং &এটি একটি বিদ্যমান কমান্ড পরে একটি অতিরিক্ত কমান্ড স্থাপন করতে ব্যবহার করা যেতে পারে যে সত্য এর সুবিধা গ্রহণ করে ।
    • ver & :: <comment>খুব কার্যকর হয় তবে এটি কেবলমাত্র (...)ব্লকের বাইরে ব্যবহারযোগ্য , কারণ সেখানে এর নিরাপদ ব্যবহার ::স্ট্যান্ডেলোন ব্যবহারের চেয়ে আরও সীমিত ।
  • ইন্ট্রা-লাইন মন্তব্য , যা স্থাপন করা মধ্যে এমনকি একটি লাইনে একাধিক কমান্ড বা আদর্শভাবে ভিতরে একটি প্রদত্ত কমান্ডের।
    ইন্ট্রা-লাইন মন্তব্যগুলি সর্বাধিক নমনীয় (একক লাইন) ফর্ম এবং সংজ্ঞা অনুসারে EOL মন্তব্য হিসাবেও ব্যবহার করা যেতে পারে।

    • ver & REM^. ^<comment^> & verকমান্ডগুলির মধ্যে একটি মন্তব্য সন্নিবেশ করার অনুমতি দেয় (আবার, জিবের উত্তরের সৌজন্যে ), তবে লক্ষ্য করুন যে কীভাবে <এবং রক্ষা করা >প্রয়োজন ^, কারণ নিম্নলিখিত< > | অক্ষরগুলি : ব্যবহার করা যাবে না হিসাবে হয় (যেহেতু unescaped &বা &&বা ||শুরু আগামী কমান্ড)।

    • %= <comment> =%, যেমন ডেনহ্যামের দুর্দান্ত উত্তরে বিস্তারিত বলা হয়েছে , এটি সবচেয়ে নমনীয় ফর্ম , কারণ এটি একটি আদেশের (আর্গুমেন্টের মধ্যে) ভিতরে স্থাপন করা যেতে পারে
      এটি ভেরিয়েবল-প্রসারণ সিনট্যাক্সের উপকারটি এমনভাবে গ্রহণ করে যা নিশ্চিত করে যে অভিব্যক্তিটি সর্বদা শূন্য স্ট্রিংয়ের দিকে প্রসারিত হয় - যতক্ষণ না মন্তব্য পাঠ্যর মধ্যে নেই %এবং:
      লাইক নেই REM, যতক্ষণ না ব্লকের %= <comment> =%বাইরে এবং ভিতরে উভয়ই ভাল কাজ করে (...), তবে এটি আরও দৃশ্যত স্বতন্ত্র; কেবলমাত্র নীচের দিকগুলি হ'ল এটি টাইপ করা শক্ত, ত্রুটিযুক্তভাবে ভুল পাওয়া সহজ, এবং ব্যাপকভাবে পরিচিত নয়, যা কৌশলটি ব্যবহার করে এমন উত্স কোড বোঝার ক্ষেত্রে বাধা সৃষ্টি করতে পারে।


মাল্টি-লাইন (পুরো লাইন ব্লক) মন্তব্যসমূহ :

  • জেমস কে এর উত্তর দেখায় যে কীভাবে একটি gotoবিবৃতি এবং লেবেল ব্যবহার করতে হবে স্বেচ্ছাসেবী দৈর্ঘ্য এবং সামগ্রীর একাধিক-মন্তব্য মন্তব্য সীমিত করার জন্য (যা তার ক্ষেত্রে তিনি ব্যবহারের তথ্য সংরক্ষণ করার জন্য ব্যবহার করেন)।

  • জি-র উত্তরটি দেখায় যে মাল্টি-লাইন মন্তব্য তৈরি করতে কীভাবে একটি "নাল লেবেল" ব্যবহার করতে হয়, যদিও সমস্ত অভ্যন্তরীণ লাইনগুলি সমাপ্ত করার জন্য যত্ন নিতে হবে ^

  • রব ভ্যান ডের ওয়াউডের ব্লগ পোস্টে আরও কিছুটা অস্পষ্ট বিকল্পের কথা উল্লেখ করা হয়েছে যা আপনাকে একটি অনিয়মিত মন্তব্যের লাইনের সাথে একটি ফাইল শেষ করতে দেয় : খোলার( ফলে কেবলমাত্র সমস্ত কিছু উপেক্ষা করা হয় কারণ যতক্ষণ না এটি থাকে (অ- ^-সেসপেড) ), যতক্ষণ না ব্লকটি বন্ধ না থাকে ।


[1] ব্যবহার SET "foo=bar", অর্থাত্ নাম এবং চারপাশের উদ্ধৃতি চিহ্ন নির্বাণ - ভেরিয়েবল সংজ্ঞায়িত করতে =এবং মান মিলিত - যেমন কমান্ড এর প্রয়োজন SET "foo=bar" & REM Set foo to bar.যাতে তা নিশ্চিত করার জন্য কি অনুসরণ করে পরবর্তী কমান্ড পরিবর্তনশীল মান (আপ অভিপ্রেত এই ক্ষেত্রে একক স্থান) দুর্ঘটনাক্রমে এটির অংশ হয় না।
(একদিকে যেমন: SET foo="bar"সমস্যাটি কেবল এড়ানো হবে না, এটি ডাবল কোটকে মানটির অংশ করে তুলবে )।
নোট করুন যে এই সমস্যাটি সহজাত SETএবং এমনকি মানটি অনুসরণ করে দুর্ঘটনাক্রমে চলমান সাদা স্থানের ক্ষেত্রে প্রযোজ্য , তাই সর্বদা পন্থাটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে ।SET "foo=bar"


7

এই পৃষ্ঠাটি বলবে যে "::" ব্যবহার নির্দিষ্ট কিছু সীমাবদ্ধতার অধীনে দ্রুততর হবে যখন চয়ন করার সময় বিবেচনা করার মতো একটি বিষয়


2
এটি সত্য, কমপক্ষে Win7SP1 এর পক্ষে ::6 গুণ দ্রুত হতে পারেREM
জেব

4

ভাল প্রশ্ন ... আমি দীর্ঘকাল ধরে এই কার্যকারিতাটি খুঁজছি ...

বেশ কয়েকটি পরীক্ষা এবং কৌতূহলের পরে মনে হয় আরও ভাল সমাধান আরও সুস্পষ্ট ...

-> আমি এটি করতে পারার সর্বোত্তম উপায়, পার্সার অখণ্ডতা ব্যর্থ হওয়া রোধ করা, আরইএমকে পুনরায় ব্যবহার করছে:

echo this will show until the next REM &REM this will not show

আপনি "নুল লেবেল" ট্রিকের সাথে মাল্টলাইনও ব্যবহার করতে পারেন ... (ধারাবাহিকতার জন্য লাইনের শেষে forget ভুলবেন না)

::(^
this is a multiline^
comment... inside a null label!^
dont forget the ^caret at the end-of-line^
to assure continuity of text^ 
)

3

জেমস কে, আমি দুঃখিত আমি যা বলেছিলাম তার ন্যায্য অংশে ভুল ছিল। আমি যে পরীক্ষাটি করেছি তা নিম্নলিখিত:

@ECHO OFF
(
  :: But
   : neither
  :: does
   : this
  :: also.
)

এটি আপনার বিকল্পের বর্ণনা পূরণ করে তবে ") এর সাথে ব্যর্থ হয় এই সময় অপ্রত্যাশিত ছিল" " ভুল বার্তা.

আমি আজ আরও কিছুটা পরীক্ষা করে দেখেছি যে বিকল্পটি কী নয় তবে এটি উপস্থিত হয়েছে যে কীটি একই সংখ্যক রেখা রয়েছে, ডাবল কোলন দিয়ে শুরু করে একটি সারিতে দুটি লাইন নেই: (:) :) এবং ডাবল কোলনে শেষ হচ্ছে না । নিম্নোক্ত বিবেচনা কর:

@ECHO OFF
(
   : But
   : neither
   : does
   : this
   : cause
   : problems.
)

এইটা কাজ করে!

তবে এটিকেও বিবেচনা করুন:

@ECHO OFF
(
   : Test1
   : Test2
   : Test3
   : Test4
   : Test5
   ECHO.
)

এমনকি কোনও কমান্ডের সমাপ্তির পরেও একাধিক মন্তব্য করার নিয়ম প্রযোজ্য বলে মনে হয় না।

দুর্ভাগ্যক্রমে এটি যথেষ্ট কাঠবিড়ালি যে আমি এটি ব্যবহার করতে চাই তা নিশ্চিত নই।

সত্যিই, সবচেয়ে ভাল সমাধান এবং সবচেয়ে নিরাপদ যেটি আমি মনে করতে পারি তা হ'ল নোটপ্যাড ++ এর মতো কোনও প্রোগ্রাম যদি আরইএমকে ডাবল কলোন হিসাবে পড়তে পারে এবং ফাইলটি সংরক্ষণ করা হয় তখন ডাবল কলোনগুলি আরএমই স্টেটমেন্ট হিসাবে ফিরে লিখত। তবে আমি এই জাতীয় প্রোগ্রাম সম্পর্কে সচেতন নই এবং নোটপ্যাড ++ এর জন্য এমন কোনও প্লাগইন সম্পর্কে আমি অবগত নই যা এটিও করে।


2

এই বিষয়টিতে একটি খুব বিশদ এবং বিশ্লেষণাত্মক আলোচনা এই পৃষ্ঠায় উপলভ্য

এটিতে উদাহরণ কোড এবং বিভিন্ন বিকল্পের উপকারিতা / কনস রয়েছে।


1
উত্তরে প্রদত্ত লিঙ্কগুলির বিষয়বস্তু সংক্ষিপ্ত করা উচিত। অন্যথায় এটিকে "লিঙ্ক কেবল উত্তর" বলা হয় এবং লিঙ্কটি অদৃশ্য হয়ে গেলে এটি সম্পূর্ণ অকেজো। এই ক্ষেত্রে, পৃষ্ঠায় নির্দেশিত
পৃষ্ঠটি

0

ব্যাচ ফাইলে মন্তব্য করার বিভিন্ন উপায় রয়েছে

1) রিম ব্যবহার

এটি সরকারী উপায়। স্পষ্টতই এটি সম্পাদন করতে বেশি সময় নেয় ::, যদিও এটি সম্ভবত কেয়ারস প্রক্রিয়াজাত হওয়ার আগে পার্সিং বন্ধ করে দেয়। শতকরা প্রসারণ রিম এর আগে ঘটে এবং ::চিহ্নিত হওয়ার আগে ঘটে তাই ভুল পার্সেন্ট ব্যবহার অর্থাৎ পার্সেন্ট %~উপস্থিত থাকলে ত্রুটি ঘটায়। কোড ব্লকের যে কোনও জায়গায় ব্যবহার করা নিরাপদ।

2) লেবেল ব্যবহার :, ::বা :;ইত্যাদি

কারণ :: comment, ': মন্তব্য' একটি অবৈধ লেবেলের নাম কারণ এটি একটি অবৈধ অক্ষর দিয়ে শুরু হয়। যদিও কোনও লেবেলের মাঝখানে কলোন ব্যবহার করা ঠিক আছে। কোনও স্থান যদি লেবেলের শুরুতে শুরু হয়, এটি সরানো : labelহয় :label। যদি কোনও স্থান বা কোলন লেবেলের মাঝখানে উপস্থিত হয়, বাকি নামের অর্থ ব্যাখ্যা করা হয় না যদি দুটি লেবেল থাকে :f:ooএবং :f rrউভয়ই ব্যাখ্যা করা হয় :fএবং কেবলমাত্র ফাইলের পরে সংজ্ঞায়িত লেবেলে লাফ দেওয়া হবে। বাকি লেবেলটি কার্যকরভাবে একটি মন্তব্য। সেখানে একাধিক বিকল্প আছে ::, তালিকাভুক্ত এখানে । আপনি কখনও gotoবা callএকটি ::fooলেবেল করতে পারবেন না । goto :fooএবং goto ::fooকাজ করবে না।

তারা কোড ব্লকের বাইরে সূক্ষ্মভাবে কাজ করে তবে একটি কোড ব্লকের কোনও লেবেল পরে, অবৈধ বা না, একটি বৈধ কমান্ড লাইন থাকতে হবে। :: commentপ্রকৃতপক্ষে অন্য বৈধ আদেশ। এটি এটিকে একটি আদেশ হিসাবে ব্যাখ্যা করে লেবেলকে নয়; কমান্ডটির প্রাধান্য রয়েছে। ::ভলিউমে সিডির আদেশটি কোনটি , আপনি যদি মৃত্যুদন্ড কার্যকর করে থাকেন তবে তা কাজ করবে subst :: C:\, অন্যথায় আপনি ভলিউমের ত্রুটি খুঁজে পেতে পারেন না। এই কারণেই :;তর্কযোগ্যভাবে ভাল কারণ এটি এর অর্থ ব্যাখ্যা করা যায় না এবং এর পরিবর্তে একটি লেবেল হিসাবে ব্যাখ্যা করা হয় যা বৈধ কমান্ড হিসাবে কাজ করে। এটি পুনরাবৃত্তিযোগ্য নয়, পরবর্তী লেবেলের পরে কমান্ডের প্রয়োজন হবে না। এ কারণেই তারা দ্বিগুণ হয়ে আসে।

আপনাকে যেমন লেবেলের পরে একটি বৈধ কমান্ড সরবরাহ করতে হবে echo something। একটি কোড ব্লকের একটি লেবেল কমপক্ষে একটি বৈধ কমান্ডের সাথে আসতে হবে, সুতরাং লাইন দুটি জোড়ায় আসে। )যদি পরের লাইনে কোনও স্থান বা বন্ধকৃত প্রথম বন্ধনী থাকে তবে আপনি একটি অপ্রত্যাশিত ত্রুটি পাবেন । দুটি ::লাইনের মধ্যে কোনও স্থান থাকলে আপনি একটি অবৈধ সিন্ট্যাক্স ত্রুটি পাবেন।

আপনি ::মন্তব্যে ক্যারেট অপারেটরটিও এর মতো ব্যবহার করতে পারেন:

@echo off

echo hello
(
   :;(^
   this^
   is^
   a^
   comment^
   )
   :;
)
   :;^
   this^
   is^
   a^
   comment
   :;
) 

তবে :;উপরে বর্ণিত কারণটির জন্য আপনার পিছনের প্রয়োজন ।

@echo off

(
echo hello
:;
:; comment
:; comment
:;
)
echo hello

এটি একটি সংখ্যার যতক্ষণ আছে ঠিক আছে। নিঃসন্দেহে মন্তব্য করার সর্বোত্তম উপায় - 4 টি লাইন এবং দিয়ে :;। আপনার সাথে :;এমন কোনও ত্রুটি পাবেন না যা ব্যবহার করে 2> nulবা দমন করা দরকার subst :: C:\। আপনি ব্যবহার করতে পারে subst :: C:\হওয়া থেকে আপনার কাজের তালিকা প্রতিরোধ কোডে: ভলিউম পাওয়া যায়নি ত্রুটি দূরে যেতে করতে বরং এর অর্থ আপনার কাছে করা সেঃ করতে হবে ::\

একটি লাইনের শেষে মন্তব্য করতে আপনি করতে পারেন command &::বা করতে পারেন command & rem comment, তবে এখনও এর মতো একটি সমান সংখ্যা থাকতে হবে:

@echo off

(
echo hello & :;yes
echo hello & :;yes
:;
)

echo hello

প্রথম echo hello & :;yesআগামী লাইনে একটি বৈধ কমান্ড রয়েছে কিন্তু দ্বিতীয় & :;yesতাই এটি এক অর্থাত দরকার না, :;

3) একটি অবৈধ পরিবেশ পরিবর্তনশীল ব্যবহার

%= comment =%। একটি ব্যাচ ফাইলে, পরিবেশের ভেরিয়েবলগুলি যা সংজ্ঞায়িত হয় না তা স্ক্রিপ্ট থেকে সরানো হয়। এটি ব্যবহার না করে একটি লাইনের শেষে এগুলি ব্যবহার সম্ভব করে তোলে &। এটি একটি অবৈধ পরিবেশ পরিবর্তনশীল অর্থাত সমান চিহ্ন সহ একটি ব্যবহার করা প্রথাগত। অতিরিক্ত সমান প্রয়োজন হয় না তবে এটি প্রতিসাম্যপূর্ণ দেখায়। এছাড়াও, "=" দিয়ে শুরু হওয়া ভেরিয়েবলের নামগুলি অননুমোদিত ডায়নামিক ভেরিয়েবলের জন্য সংরক্ষিত। এই গতিশীল পরিবর্তনশীলগুলি কখনই "=" দিয়ে শেষ হয় না, সুতরাং মন্তব্যের শুরু এবং শেষ উভয়দিকে "=" ব্যবহার করে কোনও নাম সংঘর্ষের সম্ভাবনা নেই। মন্তব্যে %বা থাকতে পারে না :

@echo off 
echo This is an example of an %= Inline Comment =% in the middle of a line.

4) একটি কমান্ড হিসাবে, stulr নুল থেকে পুনঃনির্দেশ

@echo off
(
echo hello
;this is a comment 2> nul
;this is another comment  2> nul
)

5) একটি ফাইলের শেষে, একটি বন্ধ না বন্ধনী পরে সমস্ত মন্তব্য একটি মন্তব্য

@echo off
(
echo hello
)

(this is a comment
this is a comment
this is a comment
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.