উইন্ডোজ ব্যাচ ফাইলের মাধ্যমে একাধিক লাইনে দীর্ঘ কমান্ড বিভক্ত করুন


735

আমি কীভাবে ব্যাচ ফাইলে একাধিক লাইনের উপর দীর্ঘ কমান্ডগুলি বিভক্ত করতে পারি?

উত্তর:


917

আপনি ক্যারেটের সাথে লম্বা লাইনগুলি বিচ্ছিন্ন করতে পারেন যতক্ষণ না ^আপনি মনে রাখবেন যে ক্যারেট এবং এর পরে নেওয়া নতুন লাইনটি সম্পূর্ণ অপসারণ করা হয়েছে। সুতরাং, যদি কোনও স্থান থাকা উচিত যেখানে আপনি লাইনটি ভাঙছেন, একটি স্থান অন্তর্ভুক্ত করুন। ( আরও নীচে এটি। )

উদাহরণ:

copy file1.txt file2.txt

হিসাবে লেখা হবে:

copy file1.txt^
 file2.txt

95
আপনি যদি ^আপনার কমান্ড পাঠ্যের ঠিক আগে এবং পরে একটি স্থান যুক্ত করেন তবে স্থান ছাড়াই আপনি পরবর্তী লাইনটি শুরু করতে পারেন ।
জোসেফ ডাইগল

4
@ শেবা আইলিংওয়ার্থ - না, আপনি যখন সর্বদা সম্পাদনা করেন মোট 2 লাইন-ফিড তৈরি করতে আপনি সর্বদা [স্পেস] + [^] এবং দুটি ফাঁকা লাইন যুক্ত করতে পারেন echo
জেমস কে

12
সুরক্ষার জন্য
ক্যারেটগুলি

4
@ গ্যাভিনিমিলার: "ক্যারেট ^ অনুলিপি করার পরে এবং নতুন লাইনে ফাইল 1.txt কাজ করবে না" এটি সত্য নয়। আপনি কোনও শব্দের মাঝখানে সহ, যেকোন জায়গায় লাইনটি বিভক্ত করতে পারেন co^␍py ^␍file1 ^␍file2। আমি পরামর্শ দিচ্ছি যে আপনি বিভ্রান্তি এড়াতে আপনার মন্তব্য মুছে ফেলুন, বিশেষত যেহেতু এই আধিপত্যটি জনপ্রিয় একটি
বোরোডিন

3
এখানে একটি গ্যাচা হ'ল ^ হ'ল লাইনের সর্বশেষ অক্ষর - অর্থাত্ পরে কোনও স্থান নেই। আমি এটির সাথে সমস্যায় পড়ছিলাম এবং এটি প্রমাণিত হয়েছিল যে ক্যারেটের পরে আমার অনেকগুলি জায়গা ছিল - আমি যে সম্পাদকটি ব্যবহার করছিলাম তাতে সহজে দৃশ্যমান হয় না।
গ্রেগএনজেডজ

266

ক্যারেটের জন্য নিয়মটি হ'ল:

লাইনের শেষে একটি ক্যারেট, পরের লাইনে সংযোজন করা হবে, সংযুক্ত লাইনের প্রথম অক্ষরটি এড়িয়ে যাবে।

আপনি ক্যারেটটি একাধিকবার ব্যবহার করতে পারেন তবে সম্পূর্ণ লাইনটি line 8192 অক্ষরের (উইন্ডোজ এক্সপি, উইন্ডোজ ভিস্তা এবং উইন্ডোজ 7) সর্বাধিক লাইন দৈর্ঘ্যের অতিক্রম করতে হবে না।

echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*

echo Test2
echo one & echo two
--- Output ---
Test2
one
two

echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two

echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two

পরবর্তী চরিত্রের পালানো দমন করতে আপনি পুনঃনির্দেশ ব্যবহার করতে পারেন।

পুনঃনির্দেশ ক্যারেটের ঠিক আগে হতে হবে। তবে ক্যারেটের আগে পুনর্নির্দেশের সাথে একটি কৌতূহল রয়েছে।

আপনি ক্যারেটে একটি টোকেন রাখলে টোকেনটি সরানো হবে।

echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two


echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two

এবং স্ট্রিংয়ে লাইন ফিডগুলি এম্বেড করাও সম্ভব :

setlocal EnableDelayedExpansion
set text=This creates ^

a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed

সাফল্যের জন্য খালি লাইনটি গুরুত্বপূর্ণ। এটি কেবল বিলম্বিত প্রসারণ নিয়ে কাজ করে, অন্যথায় লাইন ফিডের পরে লাইনের বাকী অংশগুলি উপেক্ষা করা হবে।

এটি কাজ করে, কারণ লাইন প্রান্তে ক্যারেটটি পরবর্তী লাইনের ফিডটিকে উপেক্ষা করে এবং পরবর্তী অক্ষরটি থেকে পালিয়ে যায়, এমনকি পরবর্তী অক্ষরটি লাইন ফিড হলেও (গাড়ীর রিটার্ন সর্বদা এই পর্যায়ে অগ্রাহ্য করা হয়)।


লাইন ফিডের উদাহরণ সহ চূড়ান্ত কোড ব্লকটি খালি রেখা প্রদর্শন করে না, যদিও এটি রয়েছে। (কমপক্ষে এটি আই 7 এ প্রদর্শিত হবে না) পরিবর্তে একটি ব্লককোট ব্যবহার করে পুনরায় ফর্ম্যাট করার চেষ্টা করুন।
dbenham

5
প্রশ্নটি হল, আমাদের কি এমন কোনও খারাপ সরঞ্জাম সমর্থন করা উচিত যা নিয়মগুলি অনুসরণ করে না (কেউ এটিকে ব্রাউজার বলে, তবে তা নয়) বা আপনার কোনও ব্রাউজারে স্যুইচ করা উচিত?
jeb

1
আমার মানগুলিকে ঘিরে আমার দ্বিগুণ উদ্ধৃতি ছিল, যেমন var = "এখানে টেক্সট here" হিসাবে সেট করুন তবে এটি কার্যকর হয় না। ডাবল উদ্ধৃতি সরান এবং এটি ঠিক আছে।
rjt

1
@jeb, একটি উদাহরণ আপ লিখেছেন cmd কমান্ড স্ক্রিপ্ট ব্যর্থ, কিন্তু তারপর এই প্রশ্ন পাওয়া গেছে: stackoverflow.com/questions/4643376/...
rjt

পরের লাইনটি উদ্ধৃতি চিহ্ন দিয়ে শুরু হলে এটি copy ^[newline]"file1.txt" ^[newline]"file2.txt"কাজ করে না: কাজ করে না! আমি একটি স্থান যোগ করার জন্য ছিল: copy ^[newline] "file1.txt" ^[newline] "file2.txt"
আলেকজান্ডার জেলবুখ

69

(এটি মূলত ওয়েনের উত্তরের একটি পুনর্লিখন তবে ক্যারেটের চারপাশের বিভ্রান্তিটি পরিষ্কার হয়ে গেছে it তাই আমি এটি সিডাব্লু হিসাবে পোস্ট করেছি answers আমি উত্তরগুলি সম্পাদনা করতে লজ্জা পাচ্ছি না, তবে সেগুলি পুরোপুরি পুনরায় লেখা অনুচিত বলে মনে হচ্ছে))

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

উদাহরণ: (উইন্ডোজ এক্সপি এবং উইন্ডোজ on এ সমস্ত পরীক্ষা করা হয়েছে)

xcopy file1.txt file2.txt

হিসাবে লেখা যেতে পারে:

xcopy^
 file1.txt^
 file2.txt

অথবা

xcopy ^
file1.txt ^
file2.txt

অথবা এমনকি

xc^
opy ^
file1.txt ^
file2.txt

(শেষ কাজ এটা এ কারণে যে betwen কোন শূন্যস্থান আছে xcএবং ^এবং পরবর্তী লাইনের শুরুতে কোন স্পেস। সুতরাং যখন আপনি অপসারণ ^এবং সম্পর্কে newline, আপনি পেতে ... xcopy।)

পঠনযোগ্যতা এবং বিচক্ষণতার জন্য, এটি কেবলমাত্র পরামিতিগুলির মধ্যে সম্ভবত সবচেয়ে ভাল বিরতি (

নিশ্চিত করুন যে হতে ^হয় না একটি ব্যাচ ফাইলের শেষ জিনিস, যেহেতু যে সঙ্গে একটি প্রধান বিষয় উপস্থিত হতে পারে


18

একাধিক কমান্ড বন্ধনীতে রাখা যেতে পারে এবং অসংখ্য লাইনে ছড়িয়ে যায়; সুতরাং এর মতো echo hi && echo helloকিছু রাখা যেতে পারে:

( echo hi
  echo hello )

ভেরিয়েবলগুলি সহায়তা করতে পারে:

set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
  start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...

এছাড়াও আমি ক্যারেটস ( ^) এর সাথে লক্ষ্য করেছি যে ifকন্ডিশনালগুলি কেবল কোনও স্থান উপস্থিত থাকলে অনুসরণ করতে পছন্দ করেছে:

if exist ^

1
লাইনটি পেরেনস cmd1.bat && cmd2.batফর্মের থেকে পৃথক: cmd2.batযদি cmd1.batসফলভাবে সম্পাদন করা হয় তবে এক্সিকিউট করুন (বিন্যাস ছাড়াই %errorcode%)। পরের ফর্মটি নিঃশর্ত কার্যকর করে। কিছুটা অপ্রত্যাশিত (কমপক্ষে আমার জন্য) এটি হ'ল স্পষ্টতই, আপনি উভয় + এর সংমিশ্রণটি ব্যবহার করতে পারবেন না ie &&লাইন বিরতির আগে যোগ করুন ।
পল মিশালিক

( echo <line break here> hello )খালি লাইনে ফলাফল
কার্ল মরিসন

সেরা এবং পরিষ্কার উত্তর!
ক্যারেটগুলি রেগেক্সে কুরুচিপূর্ণ

9

তবে এটি মনে হয় যে লুপের মানগুলির মাঝখানে বিভাজনের জন্য একটি ক্যারেটের প্রয়োজন নেই (এবং আসলে এটি ব্যবহারের চেষ্টা করার ক্ষেত্রে একটি সিনট্যাক্স ত্রুটি হিসাবে বিবেচিত হবে)। উদাহরণ স্বরূপ,

for %n in (hello
bye) do echo %n

নোট করুন যে হ্যালো পরে বা বাই এর আগে কোনও জায়গার প্রয়োজন নেই।


অবশ্যই এটি forসিনট্যাক্সের অংশ : "ফর-সেট" এর উপাদানগুলির বিভাজকগুলি হ'ল স্থান, কমা, অর্ধিকলন, সমান চিহ্ন, ট্যাব অক্ষর এবং নতুন লাইন।
আছিনী

তবে যদি doঅংশে একাধিক / নেস্টেড if-elseবিবৃতি থাকে?
ভিকি দেব

তারপরে আপনি% n তে (হ্যালো বাই) ডক (প্রতিধ্বনি% এন ইকো% এন) এর মত বিবৃতিগুলি বন্ধ করার জন্য কেবল বন্ধনী ব্যবহার করতে পারেন
মোহাম্মদ সাফওয়াত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.