সংক্ষিপ্ত উত্তর - বর্গাকার বন্ধনী ব্যবহার করুন:
if [%1]==[] goto :blank
বা (যখন আপনার উদ্ধৃত আরোগুলি পরিচালনা করতে হবে, নীচের সম্পাদনাটি দেখুন):
if [%~1]==[] goto :blank
কেন? আপনি জিজ্ঞাসা করতে পারেন। ঠিক আছে, ঠিক যেমন যেরেমি উইলকক উল্লেখ করেছেন: http://ss64.com/nt/if.html - তারা এটি ব্যবহার করে! ঠিক আছে, তবে উদ্ধৃতিগুলির সাথে কী হয়েছে?
আবার, সংক্ষিপ্ত উত্তর: এগুলি "যাদুকর" - কখনও কখনও দ্বিগুণ (ডাবল) উদ্ধৃতিগুলি একটি একক (ডাবল) উদ্ধৃতিতে রূপান্তরিত হয়। এবং তাদের প্রথম ম্যাচ করা দরকার a
এই ছোট স্ক্রিপ্ট বিবেচনা করুন:
@rem argq.bat
@echo off
:loop
if "%1"=="" goto :done
echo %1
shift
goto :loop
:done
echo Done.
আসুন এটি পরীক্ষা করুন:
C:\> argq bla bla
bla
bla
Done.
কাজ মনে হচ্ছে। তবে এখন, দ্বিতীয় গিয়ারে স্যুইচ করা যাক:
C:\> argq "bla bla"
bla""=="" was unexpected at this time.
বুম এটি সত্যকে মূল্যায়ন করেনি, এটি মিথ্যাও বলেও মূল্যায়ন করেনি। স্ক্রিপ্ট ডিআইডি হয়েছে। আপনি যদি লাইনের কোথাও চুল্লিটি বন্ধ করার কথা বলছিলেন তবে ভাল - শক্ত ভাগ্য। আপনি এখন হ্যারি ডাগলিয়ানের মতো মারা যাবেন।
আপনি ভাবতে পারেন - ঠিক আছে, যুক্তিগুলিতে উদ্ধৃতি থাকতে পারে না। তারা যদি করে তবে এটি ঘটে। ভুল এখানে কিছু সান্ত্বনা দেওয়া হয়েছে:
C:\> argq ""bla bla""
""bla
bla""
Done.
ও আচ্ছা. চিন্তা করবেন না - কখনও কখনও এটি কাজ করবে ।
আসুন অন্য স্ক্রিপ্ট চেষ্টা করুন:
@rem args.bat
@echo off
:loop
if [%1]==[] goto :done
echo %1
shift
goto :loop
:done
echo Done.
আপনি নিজে পরীক্ষা করতে পারেন, এটি উপরের কেসগুলির জন্য ঠিক আছে। এটি যৌক্তিক - উদ্ধৃতিগুলির বন্ধনীগুলির সাথে কিছু করার নেই, সুতরাং এখানে কোনও জাদু নেই। কিন্তু বন্ধনীর সাহায্যে আরগগুলি স্পাইসিংয়ের কী হবে?
D:\>args ]bla bla[
]bla
bla[
Done.
D:\>args [bla bla]
[bla
bla]
Done.
ভাগ্য নেই সেখানে। বন্ধনীগুলি কেবলমাত্র cmd.exe
পার্সারকে শ্বাসরোধ করতে পারে না ।
আসুন এক মুহুর্তের জন্য দুষ্ট উদ্ধৃতিগুলিতে ফিরে যাই। সমস্যাটি ছিল, যখন একটি উদ্ধৃতি দিয়ে যুক্তিটি শেষ হয়েছিল:
D:\>argq "bla1 bla2"
bla2""=="" was unexpected at this time.
আমি যদি পাস করি তবে:
D:\>argq bla2"
The syntax of the command is incorrect.
স্ক্রিপ্টটি মোটেও চলবে না। একই জন্য args.bat
:
D:\>args bla2"
The syntax of the command is incorrect.
তবে আমি কী পাব, যখন এই জাতীয় ক্ষেত্রে- "
পাঠকদের সংখ্যা "ম্যাচ" হয় (যেমন - সম হয়):
D:\>args bla2" "bla3
bla2" "bla3
Done.
নিস - আমি আশা করি যে .bat
ফাইলগুলি তাদের কমান্ড লাইন আর্গুমেন্টগুলিকে কীভাবে বিভক্ত করে সে সম্পর্কে কিছু শিখেছে (ইঙ্গিত: * এটি ঠিক তেমন পছন্দ নয়)। উপরের যুক্তিতে একটি স্থান রয়েছে। তবে উদ্ধৃতিগুলি স্বয়ংক্রিয়ভাবে ছিনিয়ে নেওয়া হয় না।
আর আর্গকি? এটি কীভাবে প্রতিক্রিয়া জানায়? পূর্বাভাস:
D:\>argq bla2" "bla3
"bla3"=="" was unexpected at this time.
সুতরাং - আপনি বলার আগে ভাবেন: "কী জানেন? শুধু উদ্ধৃতি ব্যবহার করুন। [কারণ, আমার কাছে এটি দেখতে সুন্দর লাগে]"।
সম্পাদনা করুন
সম্প্রতি, এই উত্তর সম্পর্কে মন্তব্য ছিল - ভাল, স্কয়ার ব্র্যাকেটগুলি "পরিচালনা করতে পারে না" উদ্ধৃত যুক্তিগুলি পাস করা এবং তাদের সাথে এমনভাবে আচরণ করা যেমন তাদের উদ্ধৃত হয়নি।
বাক্য গঠন:
if "%~1"=="" (...)
ডাবল উদ্ধৃতিগুলির সন্ধান পাওয়া নতুন কিছু নয়, তবে প্রথম এবং শেষ অক্ষরটি যদি একটি ডাবল উদ্ধৃতি হয় তবে আর্গুমেন্ট ভেরিয়েবল থেকে উদ্ধৃতি উদ্ধৃতিগুলির একটি ঝরঝরে বৈশিষ্ট্য প্রদর্শন।
এই "প্রযুক্তি" বর্গাকার বন্ধনীগুলির পাশাপাশি কাজ করে:
if [%~1]==[] (...)
এটি উল্লেখ করা একটি দরকারী জিনিস ছিল, তাই আমি নতুন উত্তরটিকেও উজ্জীবিত করেছি।
শেষ পর্যন্ত, ডাবল উক্তি ভক্তরা, ফর্মের একটি যুক্তি ""
আপনার বইতে উপস্থিত আছে, বা এটি ফাঁকা? শুধু জিজ্ঞাসা করুন ';)
GOTO BLANK
অন্য দুটিIF
বিবৃতিতে বন্ধনী ( লাইনের মতো) যুক্ত করেন, তবে সমস্যাটি কি ঠিক হবে?