আমি কীভাবে ব্যাচ ফাইলে একাধিক লাইনের উপর দীর্ঘ কমান্ডগুলি বিভক্ত করতে পারি?
আমি কীভাবে ব্যাচ ফাইলে একাধিক লাইনের উপর দীর্ঘ কমান্ডগুলি বিভক্ত করতে পারি?
উত্তর:
আপনি ক্যারেটের সাথে লম্বা লাইনগুলি বিচ্ছিন্ন করতে পারেন যতক্ষণ না ^
আপনি মনে রাখবেন যে ক্যারেট এবং এর পরে নেওয়া নতুন লাইনটি সম্পূর্ণ অপসারণ করা হয়েছে। সুতরাং, যদি কোনও স্থান থাকা উচিত যেখানে আপনি লাইনটি ভাঙছেন, একটি স্থান অন্তর্ভুক্ত করুন। ( আরও নীচে এটি। )
উদাহরণ:
copy file1.txt file2.txt
হিসাবে লেখা হবে:
copy file1.txt^
file2.txt
echo
।
co^␍py ^␍file1 ^␍file2
। আমি পরামর্শ দিচ্ছি যে আপনি বিভ্রান্তি এড়াতে আপনার মন্তব্য মুছে ফেলুন, বিশেষত যেহেতু এই আধিপত্যটি জনপ্রিয় একটি
ক্যারেটের জন্য নিয়মটি হ'ল:
লাইনের শেষে একটি ক্যারেট, পরের লাইনে সংযোজন করা হবে, সংযুক্ত লাইনের প্রথম অক্ষরটি এড়িয়ে যাবে।
আপনি ক্যারেটটি একাধিকবার ব্যবহার করতে পারেন তবে সম্পূর্ণ লাইনটি 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
সাফল্যের জন্য খালি লাইনটি গুরুত্বপূর্ণ। এটি কেবল বিলম্বিত প্রসারণ নিয়ে কাজ করে, অন্যথায় লাইন ফিডের পরে লাইনের বাকী অংশগুলি উপেক্ষা করা হবে।
এটি কাজ করে, কারণ লাইন প্রান্তে ক্যারেটটি পরবর্তী লাইনের ফিডটিকে উপেক্ষা করে এবং পরবর্তী অক্ষরটি থেকে পালিয়ে যায়, এমনকি পরবর্তী অক্ষরটি লাইন ফিড হলেও (গাড়ীর রিটার্ন সর্বদা এই পর্যায়ে অগ্রাহ্য করা হয়)।
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
কাজ করে না: কাজ করে না! আমি একটি স্থান যোগ করার জন্য ছিল: copy ^[newline] "file1.txt" ^[newline] "file2.txt"
।
(এটি মূলত ওয়েনের উত্তরের একটি পুনর্লিখন তবে ক্যারেটের চারপাশের বিভ্রান্তিটি পরিষ্কার হয়ে গেছে 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
।)
পঠনযোগ্যতা এবং বিচক্ষণতার জন্য, এটি কেবলমাত্র পরামিতিগুলির মধ্যে সম্ভবত সবচেয়ে ভাল বিরতি (
নিশ্চিত করুন যে হতে ^
হয় না একটি ব্যাচ ফাইলের শেষ জিনিস, যেহেতু যে সঙ্গে একটি প্রধান বিষয় উপস্থিত হতে পারে ।
একাধিক কমান্ড বন্ধনীতে রাখা যেতে পারে এবং অসংখ্য লাইনে ছড়িয়ে যায়; সুতরাং এর মতো 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 ^
cmd1.bat && cmd2.bat
ফর্মের থেকে পৃথক: cmd2.bat
যদি cmd1.bat
সফলভাবে সম্পাদন করা হয় তবে এক্সিকিউট করুন (বিন্যাস ছাড়াই %errorcode%
)। পরের ফর্মটি নিঃশর্ত কার্যকর করে। কিছুটা অপ্রত্যাশিত (কমপক্ষে আমার জন্য) এটি হ'ল স্পষ্টতই, আপনি উভয় + এর সংমিশ্রণটি ব্যবহার করতে পারবেন না ie &&
লাইন বিরতির আগে যোগ করুন ।
( echo <line break here> hello )
খালি লাইনে ফলাফল
তবে এটি মনে হয় যে লুপের মানগুলির মাঝখানে বিভাজনের জন্য একটি ক্যারেটের প্রয়োজন নেই (এবং আসলে এটি ব্যবহারের চেষ্টা করার ক্ষেত্রে একটি সিনট্যাক্স ত্রুটি হিসাবে বিবেচিত হবে)। উদাহরণ স্বরূপ,
for %n in (hello
bye) do echo %n
নোট করুন যে হ্যালো পরে বা বাই এর আগে কোনও জায়গার প্রয়োজন নেই।
for
সিনট্যাক্সের অংশ : "ফর-সেট" এর উপাদানগুলির বিভাজকগুলি হ'ল স্থান, কমা, অর্ধিকলন, সমান চিহ্ন, ট্যাব অক্ষর এবং নতুন লাইন।
do
অংশে একাধিক / নেস্টেড if-else
বিবৃতি থাকে?
^
আপনার কমান্ড পাঠ্যের ঠিক আগে এবং পরে একটি স্থান যুক্ত করেন তবে স্থান ছাড়াই আপনি পরবর্তী লাইনটি শুরু করতে পারেন ।