ডস ব্যাচ ফাইলে একাধিক লাইন মন্তব্য করা


98

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

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

কিভাবে আমি এই সমস্যার সমাধান করতে পারে?

উত্তর:


186

gotoকোড ছাড়তে আপনি একটি ব্যবহার করতে পারেন ।

goto comment
...skip this...
:comment

11
+1: এটির জন্য "গোটো" ব্যবহার করা মজাদার এবং এটি কার্যকর!
র‌্যাপ-2-এইচ

4
আমি মনে করি মজার বিষয়টি হ'ল কমান্ড লাইনে কোনও সঠিক মন্তব্য সংজ্ঞা নেই, আমি কেবল REMমন্তব্য লাইন হিসাবে লাইনগুলি গ্রহণ করতে পারি না , এটি আউটপুটকে অস্পষ্ট করে তোলে
এমকেবি

126

আপনি যদি GOTO ব্যবহার না করে প্রতিটি লাইনের শুরুতে আরইএম যোগ করতে চান তবে এই পদক্ষেপগুলি অনুসরণ করে আপনি সহজে নোটপ্যাড ++ ব্যবহার করতে পারেন:

  1. লাইনের ব্লকটি নির্বাচন করুন
  2. Ctrl-Q চাপুন hit

অসুবিধে করার পদক্ষেপগুলি পুনরাবৃত্তি করুন


6
সুন্দর টিপ। এটি অনেক পরিষ্কার করে তোলে।
ভেনম

4
বাহ, নোটপ্যাড ++++ এর এত সুন্দর বৈশিষ্ট্য নেই! প্রকৃতপক্ষে সত্যই এটি মিস হয়েছে কারণ আমি গ্রহনে `Ctrl + 7 'ব্যবহার করি। 42% পর্যন্ত ভোট দিয়েছেন )
ড্যানি লো

4
কি অবস্থা? সেখানে কোনও শর্টকাট পুরো ব্লককে সংঘাতবদ্ধ করতে।
ভাস্কর সিং

4
@ ভাস্করসিংহ নোটপ্যাড ++ .5.৫..6 হিসাবে, আপনি কেবল ইতিমধ্যে মন্তব্য করা পাঠ্যটি হাইলাইট করতে পারবেন; "Ctrl + Q" করুন, এবং এটি এতে অসুবিধা করবে
ক্রিয়েটিভিটিমোথি

যদি আপনার মস্তিষ্ক প্রায়ই দুর্বল মত খনি স্মরণ হয় Ctrl-Q, ক্লিক করুন Notepad++: Edit -> Comment/Uncomment
টিমো

13
break||(
 code that cannot contain non paired closing bracket
)

যদিও gotoসমাধানটি একটি ভাল বিকল্প এটি বন্ধনীগুলির মধ্যে কাজ করবে না (ফোর এবং আইএফ কমান্ড সহ) B তবে এটি করবে। যদিও বন্ধনী এবং অবৈধ সিনট্যাক্স FORএবং IFকমান্ডগুলি বন্ধ করার বিষয়ে আপনার যত্নবান হওয়া উচিত কারণ এগুলি পার্স করা হবে।

হালনাগাদ

ডেনহ্যামের উত্তরের আপডেটটি আমাকে কিছু ধারণা দিয়েছে। প্রথম - দুটি পৃথক কেস রয়েছে যেখানে আমাদের মাল্টি লাইন মন্তব্যগুলির প্রয়োজন হতে পারে - বন্ধনীটির প্রসঙ্গে যেখানে GOTO ব্যবহার করা যায় না এবং এর বাইরেও। ইনসাইড বন্ধনী প্রসঙ্গ আমরা সেখানে একটি শর্ত যা কোড executed.Though কোড thede এখনো বিশ্লেষণ করা হবে এবং কিছু সিনট্যাক্স ত্রুটি সনাক্ত করা হবে (হতে বাধা দেয় যদি অন্য বন্ধনী ব্যবহার করতে পারেন FOR, IF, উৎপন্ন বদ্ধ বন্ধনী, ভুল প্যারামিটার সম্প্রসারণ ..)। সুতরাং এটি সম্ভব হলে GOTO ব্যবহার করা ভাল।

যদিও লেবেল হিসাবে ম্যাক্রো / ভেরিয়েবল তৈরি করা সম্ভব নয় - তবে বন্ধুর মন্তব্যের জন্য ম্যাক্রোগুলি ব্যবহার করা সম্ভব ti তবে দুটি কৌশল অবতীর্ণ হতে পারে GOTO মন্তব্যগুলিকে আরও প্রতিসামান্য এবং আরও আনন্দদায়ক (কমপক্ষে আমার জন্য)) এর জন্য আমি দুটি কৌশল ব্যবহার করব - ১) আপনি একটি লেবেলের সামনে একটি একক চিহ্ন রাখতে পারেন এবং এখনও এটি খুঁজে পেতে সক্ষম হবেন (এটি আমার কেন আছে তা আমার কোনও ধারণা নেই y এটি আমার ড্রাইভ অনুসন্ধান করছে বলে অনুমান)। 2) আপনি : একটি চলক নামের শেষে একটি একক রাখতে পারেন এবং একটি প্রতিস্থাপন / সাবট্রিং বৈশিষ্ট্য ট্রিগার করা হবে না (এমনকি সক্ষম এক্সটেনশনের অধীনে)। ব্র্যাকেট মন্তব্যের জন্য ম্যাক্রোগুলির সাথে মিলিত উভয় ক্ষেত্রেই প্রায় একইরকম দেখাবে।

সুতরাং এখানে উদাহরণগুলি রয়েছে (ক্রমে আমি তাদের সর্বাধিক পছন্দ করি):

সঙ্গে আয়তক্ষেত্রাকার বন্ধনী :

@echo off

::GOTO comment macro
set "[:=goto :]%%"
::brackets comment macros
set "[=rem/||(" & set "]=)"

::testing
echo not commented 1

%[:%
  multi 
  line
  comment outside of brackets
%:]%

echo not commented 2

%[:%
  second multi 
  line
  comment outside of brackets
%:]%

::GOTO macro cannot be used inside for
for %%a in (first second) do (
    echo first not commented line of the %%a execution
    %[%
        multi line
        comment
    %]%
    echo second not commented line of the %%a execution
)

সঙ্গে কোঁকড়া বন্ধনী :

@echo off

::GOTO comment macro
set "{:=goto :}%%"
::brackets comment macros
set "{=rem/||(" & set "}=)"

::testing
echo not commented 1

%{:%
  multi 
  line
  comment outside of brackets
%:}%

echo not commented 2

%{:%
  second multi 
  line
  comment outside of brackets
%:}%

::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
    echo first not commented line of the %%a execution
    %{%
        multi line
        comment
    %}%
    echo second not commented line of the %%a execution
)

সঙ্গে প্রথম বন্ধনী :

@echo off

::GOTO comment macro
set "(:=goto :)%%"
::brackets comment macros
set "(=rem/||(" & set ")=)"

::testing
echo not commented 1

%(:%
  multi 
  line
  comment outside of brackets
%:)%

echo not commented 2

%(:%
  second multi 
  line
  comment outside of brackets
%:)%

::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
    echo first not commented line of the %%a execution
    %(%
        multi line
        comment
    %)%
    echo second not commented line of the %%a execution
)

পাওয়ারশেল এবং সি শৈলীর মধ্যে মিশ্রণ ( <ব্যবহার করা যাবে না কারণ পুনর্নির্দেশটি উচ্চতর প্রিওর সাথে *রয়েছে the এর কারণে ব্যবহার করা যায় না %*):

@echo off

::GOTO comment macro
set "/#:=goto :#/%%"
::brackets comment macros
set "/#=rem/||(" & set "#/=)"

::testing
echo not commented 1

%/#:%
  multi 
  line
  comment outside of brackets
%:#/%

echo not commented 2

%/#:%
  second multi 
  line
  comment outside of brackets
%:#/%

::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
    echo first not commented line of the %%a execution
    %/#%
        multi line
        comment
    %#/%
    echo second not commented line of the %%a execution
)

উদ্রেক করার জন্য এটি একটি মন্তব্য (ভেবেছিলেন এটি এত ছোট নয়):

@echo off

::GOTO comment macro
set "REM{:=goto :}REM%%"
::brackets comment macros
set "REM{=rem/||(" & set "}REM=)"

::testing
echo not commented 1

%REM{:%
  multi 
  line
  comment outside of brackets
%:}REM%

echo not commented 2

%REM{:%
  second multi 
  line
  comment outside of brackets
%:}REM%

::GOTO macro cannot be used inside for
for %%a in (first second) do (
    echo first not commented line of the %%a execution
    %REM{%
        multi line
        comment
    %}REM%
    echo second not commented line of the %%a execution
)

4
আপনি ব্যবহার করতে পারেন rem.||(বা rem^ (পরিবর্তে। অভিপ্রায়টি কিছুটা পরিষ্কার। আমার আপডেট হওয়া উত্তরটি দেখুন।
dbenham

@ ডিবেনহাম - হ্যাঁ রেম সহ এটি সংক্ষিপ্ত।
npocmaka

4
ওহ, বর্গাকার এবং কোঁকড়ানো বন্ধনী ফর্মগুলি সেক্সি। আমি যদি কেবল নিজের জন্য কোড লিখতাম তবে আমি এটি ব্যবহার করতে পারি। তবে আমি কল্পনা করি গড় ব্যবহারকারী এটি দেখতে পাবে এবং ডব্লিউটিএফ বলবে।
dbenham

@dbenham - হতে পারে আপনি right.I অন্তর্ভুক্ত করতে পারে হয় %rem:%+ + %:rem%খুব ফর্ম এটি আরো সুস্পষ্ট এটা এর charm.Or হারাবে শুধুমাত্র সি-শৈলী অফিস এর কাছাকাছি থাকার স্ল্যাশ ... যদিও করতে
npocmaka

4
@npocmaka এই দুর্দান্ত! আপনি কী করেছেন তা নির্ধারণ করার সময় আমি কেবল একটি ব্যাচের স্ক্রিপ্টিং জটিলতা শিখেছি learned সমস্ত ব্লক মন্তব্য পদ্ধতি থেকে আমি সচেতন (ব্যাচের জন্য), এটি সবচেয়ে শক্তিশালী এবং চতুর বলে মনে হয়। হ্যাক এবং শৈলীর সংমিশ্রণের জন্য +1
জারেড গোটে

10

অন্য বিকল্পটি হ'ল আইএফ ব্লকের মধ্যে অযাচিত লাইনগুলি বন্ধ করে দেওয়া যা কখনই সত্য হতে পারে না

if 1==0 (
...
)

অবশ্যই যদি ব্লকের মধ্যে কিছুই কার্যকর করা হবে না তবে এটি বিশ্লেষণ করা হবে। সুতরাং আপনার মধ্যে কোনও অবৈধ বাক্য গঠন থাকতে পারে না। এছাড়াও, মন্তব্যটি )এড়ানো বা উদ্ধৃতি না দেওয়া থাকতে পারে । এই কারণে গ্রহণযোগ্য GOTO সমাধান আরও নির্ভরযোগ্য। (গোটো সমাধানটি আরও দ্রুত হতে পারে)

আপডেট 2017-09-19

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

@echo off
setlocal

set "beginComment=goto :endComment"

%beginComment%
Multi-line comment 1
goes here
:endComment

echo This code executes

%beginComment%
Multi-line comment 2
goes here
:endComment

echo Done

অথবা আপনি এনপোকমাকা এর সমাধানগুলির এই রূপগুলির একটি ব্যবহার করতে পারেন । আরএম এর পরিবর্তে BREAK এর ব্যবহারটি কিছুটা পরিষ্কার করে।

rem.||(
   remarks
   go here
)

rem^ ||(
   The space after the caret
   is critical
)

1

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

@ECHO OFF
SET FLAG=1
IF [%FLAG%]==[1] (
    ECHO IN THE FIRST IF...
    GOTO comment
    ECHO "COMMENT PART 1"
:comment
    ECHO HERE AT TD_NEXT IN THE FIRST BLOCK
)

IF [%FLAG%]==[1] (
    ECHO IN THE SECOND IF...
    GOTO comment
    ECHO "COMMENT PART"
:comment
    ECHO HERE AT TD_NEXT IN THE SECOND BLOCK
)

আউটপুট হবে

IN THE FIRST IF...
HERE AT TD_NEXT IN THE SECOND BLOCK

প্রথম ব্লকের EDO এখানে TD_NEXT এ কমান্ডটি এড়িয়ে যায়।


0

@ জেব

এবং এটি ব্যবহারের পরে, স্ট্যাডারটি অ্যাক্সেসযোগ্য বলে মনে হচ্ছে

না, এটি চেষ্টা করুন:

@echo off 2>Nul 3>Nul 4>Nul

   ben ali  
   mubarak 2>&1
   gadeffi
   ..next ?

   echo hello Tunisia

  pause

তবে কেন এটি কাজ করে?

দুঃখিত, আমি উদ্ঘাটিত প্রশ্নের উত্তর:

(লা রিডাইরেশন পার্ট 3> এটি স্পোর্টসিয়াল গাড়ি এলিজিস্টের উপর রয়েছে, ক্যাপচারার pourালা ক্যাপচার লে ফ্লাক্স এরিয়ার্স 2> এএসএ ভি ভি লে ট্রান্সফর্মার ইন ফ্লাক্স রেজিস্ট্যান্ট à ল ডি এ 3> সিসি ভি ও নওস পারমেট্র ডি 'অ্যাভোয়ার অন ইজেশন) ডেস্ক এরিউর টাউট নটোর এনভায়রনমেন্ট ডি স্ক্রিপ্ট..পর্ব লা স্যুট সি ইন ভিউস রিসিভারার লে ফ্লাক্স 'স্টার্ডার' ইল ফ্যুট ​​ফাইয়ার অ্যান্ড অ্যাট্রি রিডাইরেকশন ডু হ্যান্ডেল 2> অ্যান্ড হ্যান্ডেল 1> কিউ অ্যান্টিস্টোর কন্ট্রোল কনসোল ..)


4
আমি ফরাসী পড়তে পারি না, তবে প্রাথমিক পুনর্নির্দেশটি শেষ হওয়ার পরে কেন স্ট্রিম 2 (স্ট্যাডার) অক্ষম করা অবিরত থাকবে তা আপনার ঠিকানার মতো বলে মনে হচ্ছে না। আমার কাছে ডাস্টিপস / ফর্ম / ভিউটোপিক.পিপি ? পিপি = 14612#p14612 টানা 2 টি পোস্টে একটি কার্যক্ষম তত্ত্ব এবং পরীক্ষার মামলা রয়েছে ।
dbenham

(3> দ্বারা পুনঃনির্দেশ বিশেষ কারণ এটি অব্যাহত রয়েছে, আমরা ত্রুটিগুলির প্রবাহ ক্যাপচার করতে এটি ব্যবহার করব 2> এটি কি এটির স্থির প্রবাহকে 3 এর এডে পরিণত করবে) এটি আমাদের যে কোনওটির জন্য ম্যানেজমেন্ট ত্রুটি থাকতে দেবে এনভায়রনমেন্ট স্ক্রিপ্ট .. তারপরে আপনি যদি প্রবাহ 'স্টার্ডার' পুনরুদ্ধার করতে চান তবে আমাদের অবশ্যই একটি হ্যান্ডেল পুনর্নির্দেশ 2> করতে হবে যা একটি কনসোল ব্যতীত অন্য কোনও নয় ..)
ব্যবহারকারী96403

-1

এটা চেষ্টা কর:

   @echo off 2>Nul 3>Nul 4>Nul

   ben ali
   mubarak
   gadeffi
   ..next ?

   echo hello Tunisia

  pause

+1, তবে কেন এটি কাজ করে? এবং এটি ব্যবহারের পরে,
স্ট্ডারটি

4
-1, এটি "কাজ করে" কারণ প্রতিধ্বনি 2> নুল স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি NUL এ পুনঃনির্দেশ করছে, এটি কবর দিচ্ছে (3> নুল, 4> নুল সত্যিকারের কোনও কারণে অক্সিলিয়ারি স্ট্রিমগুলি পুনর্নির্দেশ করছে)। এটি লাইনগুলি সম্পর্কে মন্তব্য করে না, এটি কেবল ত্রুটি বার্তাগুলি প্রদর্শন করতে বাধা দেয়। কমান্ড লাইন হিসাবে ব্যাখ্যা করা যায় এমন কিছু এখনও চলবে।
pdubs

4
pdubs মন্তব্য আংশিকভাবে সঠিক যে কমান্ডগুলি এখনও কার্যকর করা হচ্ছে (এবং বৈধ নয় বলে ব্যর্থ হয়েছে)। বৈধ কমান্ড ব্যর্থতা ছাড়া কার্যকর করা হবে। সুতরাং কোড লাইন মন্তব্য করার জন্য এটি একটি ভাল সমাধান নয়। স্ট্রিম 2 (স্টাডার) কেন "স্থায়ীভাবে" অক্ষম সে সম্পর্কে ব্যাখ্যা সঠিক নয়।
dbenham

4
উইন্ডোজ ব্যাচে পুনঃনির্দেশ কীভাবে কাজ করে সে সম্পর্কে আমার একটি তত্ত্ব রয়েছে এবং স্টাডার কেন এই উত্তরে "স্থায়ীভাবে" অক্ষম হয়ে যায় তা ব্যাখ্যা করে। তত্ত্ব এবং পরীক্ষাগুলি ডাস্টিপস
ফর্ম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.