ব্যাচ স্ক্রিপ্টে ডাবল উক্তিগুলি পালাচ্ছে


92

আমি কীভাবে আমার ব্যাচের ফাইলের পরামিতিতে ডাবল উদ্ধৃতি দিয়ে পালিয়ে যাওয়া ডাবল কোটগুলির সমস্ত প্রতিস্থাপন করব? এটি আমার বর্তমান ব্যাচ ফাইল, যা তার সমস্ত কমান্ড লাইনের পরামিতিগুলিকে স্ট্রিংয়ের অভ্যন্তরে প্রসারিত করে:

@echo off
call bash --verbose -c "g++-linux-4.1 %*"

এটি তখন সেই স্ট্রিংটি সাইগউইনের ব্যাশে কল করার জন্য, একটি লিনাক্স ক্রস-সংকলক নির্বাহ করে। দুর্ভাগ্যক্রমে, আমি আমার ব্যাচের ফাইলে এইগুলির মতো পরামিতি পাচ্ছি:

"launch-linux-g++.bat" -ftemplate-depth-128 -O3 -finline-functions 
-Wno-inline -Wall  -DNDEBUG   -c 
-o "C:\Users\Me\Documents\Testing\SparseLib\bin\Win32\LinuxRelease\hello.o" 
"c:\Users\Me\Documents\Testing\SparseLib\SparseLib\hello.cpp"

যেখানে প্রথম পথটির চারপাশে প্রথম উদ্ধৃতিটি অকাল সময়ের আগে জিসিসিতে পাস করা স্ট্রিংটি শেষ করছে এবং বাকী প্যারামিটারগুলি সরাসরি ব্যাশে চলে যাচ্ছে (যা দর্শনীয়ভাবে ব্যর্থ হয়))

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

উত্তর:


104

ব্যাচ স্ক্রিপ্টগুলিতে পালানোর চরিত্রটি ^। তবে ডাবল-কোটেড স্ট্রিংয়ের জন্য, কোটগুলি দ্বিগুণ করুন:

"string with an embedded "" character"

4
দ্বিগুণ হওয়া উক্তিগুলি আমার পক্ষে কাজ করে না, তবে a চ্যাম্পের মতো কাজ করেছিল।
davenpcj

26
^কেবল অব্যক্ত স্ট্রিংগুলিতেই পালানোর চরিত্র ; ডাবল-কোটেড স্ট্রিংগুলিতে এটি আক্ষরিক হিসাবে বিবেচিত হবে। ইউনিক্সের (পসিক্সের মতো) শেলগুলির বিপরীতে, দ্বিগুণ উদ্ধৃত স্ট্রিংয়ের ভিতরে ডাবল কোটগুলির cmd.exeকোনও মানকৃত শেল ট্রিটমেন্ট উপলব্ধ করা হয় , এবং প্রোগ্রামটি অনুরোধ করা হওয়ার পরে ছেড়ে দেওয়া হয় (পরবর্তী মন্তব্যে প্রকাশিত হবে না)।
mklement0

9
(পূর্ববর্তী মন্তব্য থেকে সংক্ষিপ্ত) বাস্তবে, বেশিরভাগ এক্সিকিউটেবল / স্ক্রিপ্ট দোভাষীরা প্রত্যাশিত "অক্ষরের সি কনভেনশন প্রয়োগ করেন । যেমন পলান করা \"(: সি / সি ++, পাইথন, পার্ল, রুবি অন্তত প্রযোজ্য) একটি ডাবল উদ্ধৃত পংক্তি ভিতরে। বিপরীতে ""শুধুমাত্র স্বীকৃত সংখ্যালঘু মামলার: ব্যাচ ফাইল প্রেরণ পরামিতি সালে "" করা হয় একটি হিসাবে স্বীকৃত এমবেডেড ডাবল উদ্ধৃতি নয়, তবে হিসাবে অপরিবর্তিত রাখা সংশ্লিষ্ট মধ্যে %<n>পরামিতি, অপসারণ পরেও পরিক্ষেপ সঙ্গে উদ্ধৃতি চিহ্ন %~<n>। পাইথন অনুগ্রহপূর্বক এছাড়াও স্বীকার ""বিকল্প হিসেবে, \"
mklement0

90

এপিলালেস এর নিজস্ব উত্তর সহজভাবে এবং কার্যকরভাবে তার নির্দিষ্ট সমস্যা সমাধান করে: এটি "পুরো আর্গুমেন্ট তালিকার সমস্ত দৃষ্টান্তের সাথে প্রতিস্থাপন করে \", যা বাশকে ডাবল-কোটড স্ট্রিংয়ের মধ্যে উপস্থাপনের জন্য ডাবল-কোটগুলির প্রয়োজন হয়।

ডাবল-কোটড স্ট্রিংয়ের সাহায্যে কীভাবে ডাবল-কোয়েটগুলি থেকে রক্ষা পাওয়া যায়cmd.exe , এই প্রশ্নের উত্তর দিতে উইন্ডোজ কমান্ড-লাইন ইন্টারপ্রেটার (কমান্ড লাইনে থাকুক না কেন - প্রায়শই ভুলভাবে "ডস প্রম্পট" বলা হয় - বা ব্যাচের ফাইলে): পাওয়ারশেলটি দেখার জন্য নীচে দেখুন ।

tl; dr :

  • আপনি আবশ্যক ব্যবহার"" যখন একটি স্ট্রিং ক্ষণস্থায়ী একটি (nother) এর ব্যাচ ফাইল এবং আপনার পারে ব্যবহার ""সঙ্গে তৈরি অ্যাপ্লিকেশনের সাথে মাইক্রোসফট এর সি / সি ++ / নেট কম্পাইলার। (যা এছাড়াও গ্রহণ \"), যা Windows এ পাইথন আর Node.js অন্তর্ভুক্ত :

    • উদাহরণ: foo.bat "We had 3"" of rain."

    • নিম্নলিখিতটি কেবল ব্যাচ ফাইলগুলিতে প্রযোজ্য:

      • ""cmd.exeসম্পূর্ণ ডাবল-কোটড স্ট্রিংকে একক যুক্তি হিসাবে বিবেচনা করার জন্য কমান্ড ইন্টারপ্রেটার ( ) পাওয়ার একমাত্র উপায় ।

      • দুঃখের বিষয়, তবে, কেবল আবদ্ধ ডাবল-কোটগুলি (যথারীতি) ধরে রাখা হয় না, তবে দ্বিগুণ পালিয়ে যাওয়া লোকেরাও তাই অভিযুক্ত স্ট্রিংটি পাওয়া একটি দুই-পদক্ষেপ প্রক্রিয়া; উদাহরণস্বরূপ, ধরে নিই যে ডাবল-কোটযুক্ত স্ট্রিংটি প্রথম আর্গুমেন্ট হিসাবে পাস হয়েছে %1:

      • set "str=%~1"ঘেরযুক্ত ডাবল-কোটস সরিয়ে দেয়; set "str=%str:""="%"তারপরে দ্বিগুণ ডাবল-কোটগুলি একককে রূপান্তর করে।
        মানগুলির অবাঞ্ছিত ব্যাখ্যা রোধ করতে অ্যাসাইনমেন্ট অংশগুলির চারপাশে ঘেরযুক্ত ডাবল-কোট ব্যবহার করা নিশ্চিত করুন।

  • \"হয় প্রয়োজনীয় - একমাত্র বিকল্প হিসাবে - আরও অনেক প্রোগ্রাম দ্বারা , (! যেমন, রুবি, পার্ল, এবং এমনকি মাইক্রোসফট নিজস্ব উইন্ডোজ PowerShell ()), কিন্তু এর ব্যবহার করবেন নিরাপদ :

    • \"উইন্ডোজ পাওয়ারশেল সহ - বাইরে থেকে স্ট্রিংগুলি পাস করার সময় - বা মাইক্রোসফ্টের সংকলকগুলির ক্ষেত্রে বিকল্প হিসাবে সমর্থন হিসাবে - অনেকগুলি এক্সিকিউটেবল এবং দোভাষী যা প্রয়োজন তা হ'ল শেষ পর্যন্ত, যদিও এটি আর্গুমেন্ট লিস্টকে পার্স করার জন্য লক্ষ্য প্রোগ্রামটি আপ । ""
      • উদাহরণ: foo.exe "We had 3\" of rain."
    • তবে ব্যাবহারের \"কমান্ড এবং / অথবা ইনপুট / আউটপুট পুনঃনির্দেশগুলি অবাঞ্ছিত, নির্বিচারে জারিক্রমে পারেন ফলে :
      • নিম্নলিখিত অক্ষরগুলি এই ঝুঁকিটি উপস্থাপন করে: & | < >
      • উদাহরণস্বরূপ, verকমান্ডটি অনিচ্ছাকৃত প্রয়োগের জন্য নিম্নলিখিত ফলাফলগুলি ; একটি ব্যাখ্যার জন্য নীচে আরও দেখুন এবং পরবর্তী কাজের বুলেট পয়েন্ট:
        • foo.exe "3\" of snow" "& ver."
    • জন্য উইন্ডোজ PowerShell , \""এবং "^""শক্তসমর্থ আছে, কিন্তু সীমাবদ্ধ বিকল্প (নীচে অধ্যায় দেখুন "PowerShell এর CLI কল করা হচ্ছে ...")।
  • যদি আপনার অবশ্যই ব্যবহার করা \"হয় তবে কেবলমাত্র 3 টি নিরাপদ পন্থা রয়েছে যা এটি বেশ জটিল : তার সহায়তার জন্য টিএসের টুপিটি ।

    • আপনার ব্যাচ ফাইলে (সম্ভবত নির্বাচনী ) বিলম্বিত ভেরিয়েবল প্রসারণ ব্যবহার করে , আপনি একটি পরিবর্তনশীল এবং রেফারেন্সে আক্ষরিক সংরক্ষণ\""..."!var! করতে পারেন যা সিনট্যাক্স ব্যবহার করে স্ট্রিংয়ের ভিতরে পরিবর্তনশীল হয় - টিএসের সহায়ক উত্তরটি দেখুন

      • উপরোক্ত পদ্ধতির বোঝাপড়া হওয়া সত্ত্বেও, সুবিধা রয়েছে যে আপনি এটি পদ্ধতিগতভাবে প্রয়োগ করতে পারেন এবং এটি যে কোনও ইনপুট সহ দৃ rob়তার সাথে কাজ করে ।
    • কেবলমাত্র লিটারিয়াল স্ট্রিংগুলির সাথে - যেগুলি ভারিবেলে জড়িত নয় - আপনি কি একই ধরণের পদ্ধতিগত পদ্ধতির সন্ধান করেন: ^স্পষ্টভাবে- সমস্ত মেটাচ্যাকারকে পরীক্ষা করুন cmd.exe: " & | < > এবং - আপনি যদি ভেরিয়েবল সম্প্রসারণ দমন করতে চান - %:
      foo.exe ^"3\^" of snow^" ^"^& ver.^"

    • অন্যথায়, স্ট্রিংয়ের কোন অংশটিcmd.exe\" বন্ধ করে দেওয়া ডিলিমেটার হিসাবে ভুল ব্যাখ্যা করার কারণে স্ট্রিংয়ের কোন অংশকে অযোগ্য বলে বিবেচনা করে তার ভিত্তিতে আপনার স্ট্রিং তৈরি করতে হবে :

      • মধ্যে আক্ষরিক শেল metacharacters ধারণকারী অংশ: ^তাদের -escape; উপরের উদাহরণটি ব্যবহার করে, এটি হ'ল &অবশ্যই ^ছাড়ানো উচিত :
        foo.exe "3\" of snow" "^& ver."

      • স্টাইল ভেরিয়েবল রেফারেন্স সহ%...% অংশে : এটি নিশ্চিত করে যে cmd.exeএগুলি একটি "..."স্ট্রিংয়ের অংশ হিসাবে বিবেচিত এবং ভেরিয়েবল মানগুলি এম্বেড, ভারসাম্যহীন উদ্ধৃতি নেই - যা সর্বদা সম্ভব হয় না

পটভূমি তথ্যের জন্য, পড়ুন।


পটভূমি

দ্রষ্টব্য: এটি আমার নিজের পরীক্ষাগুলির উপর ভিত্তি করে। আমি ভুল হলে আমাকে জানাবেন।

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

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

সুতরাং, ইউনিক্সের বিপরীতে, আর্গুমেন্টের স্ট্রিংটিকে বিশ্লেষণ করার এবং এটিকে উদ্ধৃত বাক্যগুলি পৃথক যুক্তিতে বিভক্ত করার লক্ষ্য প্রোগ্রামটির দায়িত্ব। সুতরাং, বিভিন্ন প্রোগ্রাম অনুমানের সাথে পৃথকীকরণের পৃথক পদ্ধতিগুলির প্রয়োজন হতে পারে এবং সমস্ত প্রোগ্রামের সাথে কাজ করার গ্যারান্টিযুক্ত কোনও একক পালানোর ব্যবস্থা নেই - https://stackoverflow.com/a/4094897/45375 নৈরাজ্যের উপর দুর্দান্ত ব্যাকগ্রাউন্ড রয়েছে যা উইন্ডোজ কমান্ড-লাইন পার্সিং

অনুশীলনে, \"খুব সাধারণ, তবে নিরাপদ নয় , যেমন উপরে বর্ণিত:

যেহেতু cmd.exeনিজেই \"একটি পালিয়ে যাওয়া ডাবল-কোট হিসাবে স্বীকৃতি দেয় না , তাই এটি কমান্ড লাইনে পরে টোকেনগুলি অব্যক্ত হিসাবে চিহ্নিত করতে এবং সম্ভাব্যভাবে তাদের আদেশ ও / অথবা ইনপুট / আউটপুট পুনঃনির্দেশ হিসাবে ব্যাখ্যা করতে পারে ।
সংক্ষেপে: সমস্যা পৃষ্ঠতল, যদি নিম্নলিখিত অক্ষরগুলি কোন একটি অনুসরণ ওপেনিং বা ভারসাম্যহীন \" :& | < > ; উদাহরণ স্বরূপ:

foo.exe "3\" of snow" "& ver."

cmd.exe\"নিয়মিত ডাবল-কোট হিসাবে ভুল ব্যাখ্যা করার ফলে নিম্নলিখিত টোকেনগুলি দেখে :

  • "3\"
  • of
  • snow" "
  • বিশ্রাম: & ver.

যেহেতু cmd.exeমনে হয় যে & ver.এটি উদ্ধৃত নয় , এটি এটি &(কমান্ড-সিকোয়েন্সিং অপারেটর) হিসাবে ব্যাখ্যা করে , তারপরে কার্যকর করার জন্য একটি কমান্ডের নাম ( ver.- .উপেক্ষা করা হয়; verপ্রতিবেদনের cmd.exeসংস্করণ তথ্য)।
সামগ্রিক প্রভাব:

  • প্রথমত, foo.exeকেবল প্রথম 3 টি টোকেন দিয়ে আমন্ত্রণ জানানো হয় ।
  • তারপরে, কমান্ড verকার্যকর করা হয়।

এমনকি দুর্ঘটনাজনিত কমান্ড কোনও ক্ষতি না করে এমন ক্ষেত্রেও, আপনার সামগ্রিক কমান্ডটি নকশাকৃত হিসাবে কাজ করবে না, প্রদত্ত যে সমস্ত আর্গুমেন্ট এতে প্রেরণ করা হয় না।

অনেক সংকলক / দোভাষী কেবলমাত্র স্বীকৃতি দেয়\" - যেমন, জিএনইউ সি / সি ++ সংকলক, পাইথন, পার্ল, রুবি এমনকি মাইক্রোসফ্টের নিজস্ব উইন্ডোজ পাওয়ারশেল যখন উইন্ডোজ পাওয়ারশেলের জন্য অন্তর্ভুক্ত থাকে cmd.exe- এবং \""তাদের জন্য কোনও সহজ সমাধান নেই for এই সমস্যা
মূলত, আপনাকে আগেই জানতে হবে যে আপনার কমান্ড লাইনের কোন অংশটি অব্যক্ত হিসাবে ভুল ব্যাখ্যা করা হয়েছে, এবং সেই অংশগুলির ^সমস্ত উদাহরণকে বেছে বেছে বেছে নিতে হবে & | < >

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


পাওয়ারশেলের সি এল এল থেকে কল করা cmd.exeবা পসিএক্স-এর মতো শেলগুলি:

দ্রষ্টব্য: পাওয়ারশেলের ভিতরে কীভাবে উদ্ধৃতি পরিচালনা করা হয় তার নীচের অংশটি দেখুন ।

যখন বাইরে থেকে আহ্বান করা হয় - যেমন cmd.exeকমান্ড লাইন বা ব্যাচ ফাইল থেকে:

  • পাওয়ারশেল [কোর] ভি 6 + এখন সঠিকভাবে সনাক্ত করেছে"" (পাশাপাশি\"), যা ব্যবহার করা এবং হোয়াইটস্পেস-সংরক্ষণ উভয়ই নিরাপদ

    • pwsh -c " ""a & c"".length " বিরতি দেয় না এবং সঠিকভাবে ফলন দেয় 6
  • উইন্ডোজ পাওয়ারশেল (লেগ্যাসি সংস্করণ যার শেষ সংস্করণ 5.1) কেবলমাত্র এবং উইন্ডোজে এবং আরও শক্তিশালী / (যদিও অভ্যন্তরীণভাবে পাওয়ারশেলডাবল-কোটেড স্ট্রিংগুলিতে পলায়ন চরিত্র হিসাবেব্যবহারকরে এবং গ্রহণ করে- নীচের অংশটি দেখুন) স্বীকৃতি দেয় \""""\"""^"" : `""

/ একটি ব্যাচের ফাইল থেকে উইন্ডোজ পাওয়ারশেলকে কল করা :cmd.exe

  • "" বিরতি , কারণ এটি মূলত অসমর্থিত:

    • powershell -c " ""ab c"".length " -> ত্রুটি "স্ট্রিংটি টার্মিনেটরটি হারিয়েছে"
  • \"এবং নীতিগতভাবে""" কাজ করে তবে নিরাপদ নয় :

    • powershell -c " \"ab c\".length "উদ্দেশ্যে হিসাবে কাজ করে: এটি আউটপুট 5( 2 স্পেস নোট করুন )
    • তবে এটি নিরাপদ নয়, কারণ cmd.exeমেটাচার্যাক্টরা কমান্ডটি ভেঙে ফেলেছে, যদি না পালানো হয়:
      powershell -c " \"a& c\".length " বিরতি , কারণ &, যার ফলে পালাতে হবে^&
  • \""হয় নিরাপদ , কিন্তু স্বাভাবিক অভ্যন্তর হোয়াইটস্পেস , যা অবাঞ্ছিত করা যেতে পারে:

    • powershell -c " \""a& c\"".length "আউটপুট 4(!), কারণ 2 স্পেসগুলি 1 এ স্বাভাবিক করা হয়েছে।
  • "^""উইন্ডোজ পাওয়ারশেলের জন্য বিশেষভাবে সেরা পছন্দ , যেখানে এটি উভয়ই নিরাপদ এবং হোয়াইটস্পেস সংরক্ষণযোগ্য তবে পাওয়ারশেল কোর (উইন্ডোজে) এর সাথে এটি হ'ল\"" হোয়াইটস্পেস- নরমালাইজিংয়ের সমান । এই পদ্ধতির আবিষ্কারের জন্য ক্রেডিট ভেন্রিক্সে যায় ।

    • powershell -c " "^""a& c"^"".length " কাজ করে : বিরতি দেয় না - সত্ত্বেও &- এবং আউটপুট 5, অর্থাত্, সঠিকভাবে সংরক্ষিত সাদা স্থান।

    • PowerShell কোর : pwsh -c " "^""a& c"^"".length " কাজ করে , কিন্তু আউটপুট 4, অর্থাত্ normalizes হোয়াইটস্পেস , যেমন \""আছে।

উপর ইউনিক্সের মত প্ল্যাটফর্মের (লিনাক্সের, MacOS), কলিং যখন PowerShell [কোর] 'র CLI, pwshথেকে একটি POSIX মত শেল যেমন bash:

আপনার অবশ্যই ব্যবহার করা উচিত\" , যা তবে উভয়ই নিরাপদ এবং সাদা স্থান সংরক্ষণ করে :

$ pwsh -c " \"a&  c|\".length" # OK: 5

সম্পর্কে তথ্য

  • ^ডাবল- উদ্ধৃতিযুক্ত স্ট্রিংগুলির অভ্যন্তরে কেবল অব্যক্ত স্ট্রিংগুলিতে কেবল পালানোর চরিত্র হিসাবেই ব্যবহার করা যেতে পারে^ এবং এটি আক্ষরিক হিসাবে বিশেষ হিসাবে বিবেচিত হয় না।

    • কায়েট : স্টেটমেন্টে পাস হওয়া প্যারামিটারগুলির ব্যবহার ভেঙে গেছে^call (এটি উভয়ের ব্যবহারের ক্ষেত্রে প্রযোজ্য call: অন্য ব্যাচ ফাইল বা বাইনারি এবং একই ব্যাচের ফাইলে সাব্রোটিন কল করা):
      • ^মধ্যে দৃষ্টান্ত ডাবল উদ্ধৃত মান অস্বাভাবিক দ্বিগুণ , মান পরিবর্তনের প্রেরণ করা হচ্ছে: যেমন, পরিবর্তনশীল যদি %v%আক্ষরিক মান রয়েছে a^b, call :foo "%v%"নির্ধারণ "a^^b"করার জন্য (!) %1সাবরুটিন মধ্যে (প্রথম প্যারামিটার) :foo
      • Unquoted ব্যবহার ^সঙ্গে callকরা হয় পুরাপুরি ভেঙ্গে যে ^আর বিশেষ অক্ষর অব্যাহতি ব্যবহার করা যাবে যেমন:call foo.cmd a^&bশান্তভাবে বিরতি (পরিবর্তে আক্ষরিক ক্ষণস্থায়ীa&bখুবfoo.cmd, যেমন ছাড়া কেস হবেcall-)foo.cmdঅন্তত উইন্ডোজ এমনকি প্রার্থনা করা হয় না, (!) 7।
  • একটি আক্ষরিক পলায়নপরকিন্তু %একটি বিশেষ ক্ষেত্রে দেখা যায় , দুর্ভাগ্যবশত, যা একটি স্ট্রিং উল্লিখিত হয় কিনা তার উপর নির্ভর করে স্বতন্ত্র বাক্য গঠন প্রয়োজন কমান্ড লাইন বনাম একটি ব্যাচ ফাইল ভিতরে ; দেখতে https://stackoverflow.com/a/31420292/45375

    • এর সংক্ষিপ্ততা: ব্যাচ ফাইলের অভ্যন্তরে ব্যবহার করুন %%। কমান্ড লাইনে, এড়ানো% যায় না, তবে আপনি যদি ^শুরুর দিকে, শেষের দিকে, বা কোনও অযোগ্য স্ট্রিংতে (যেমন, echo %^foo%) কোনও ভেরিয়েবলের ভিতরে রাখেন , তবে আপনি ভেরিয়েবল প্রসারণ (ইন্টারপোলেশন) প্রতিরোধ করতে পারেন; %কমান্ড লাইনে দৃষ্টান্তগুলি যা কোনও চলক রেফারেন্সের অংশ নয়, তাকে আক্ষরিক হিসাবে বিবেচনা করা হয় (যেমন, 100%)।
  • সাধারণত, স্পেস এবং বিশেষ অক্ষর থাকতে পারে এমন পরিবর্তনশীল মানগুলির সাথে নিরাপদে কাজ করার জন্য :

    • অ্যাসাইনমেন্ট : ঘিরা উভয় পরিবর্তনশীল নাম এবং একটি মান একক ডাবল কোট যুগল ; উদাহরণস্বরূপ, চলককে set "v=a & b"আক্ষরিক মান নির্ধারণ করে (বিপরীতে, ডাবল-কোটগুলি মানটির অংশ করে তোলে)। আক্ষরিক উদাহরণগুলি এড়িয়ে চলুন (কেবল ব্যাচ ফাইলে কাজ করে - উপরে দেখুন)।a & b%v%set v="a & b"%%%
    • রেফারেন্স : ডাবল-উদ্ধৃতি ভেরিয়েবল উল্লেখগুলি তাদের মান আন্তঃবিবাহিত হয় না তা নিশ্চিত করতে; উদাহরণস্বরূপ, দ্রবীভূতকরণ এবং মুদ্রণের echo "%v%"মান সাপেক্ষে না (তবে নোট করুন যে ডাবল-কোটগুলিও অবিচ্ছিন্নভাবে মুদ্রিত থাকে)। বিপরীতে, আক্ষরিক পাস করে , কমান্ড-সিকোয়েন্সিং অপারেটর হিসাবে ব্যাখ্যা করে এবং তাই নামের একটি কমান্ড কার্যকর করার চেষ্টা করে । বিবৃতি সহ উপরের সাবধানবাণী পুনরায় ব্যবহারের বিষয়টিও নোট করুন ।%v%"a & b"echo %v%aecho&b
      ^call
    • বাহ্যিক প্রোগ্রামগুলি সাধারণত প্যারামিটারগুলির চারপাশে ঘেরযুক্ত ডাবল-কোটগুলি সরিয়ে ফেলার যত্ন নেয়, তবে যেমনটি উল্লেখ করা হয়েছে, ব্যাচ ফাইলগুলিতে আপনাকে এটি নিজেই করতে হবে (উদাহরণস্বরূপ, %~11 ম প্যারামিটার থেকে ঘেরযুক্ত ডাবল-কোটস অপসারণ করতে) এবং, দুঃখের বিষয়, কোনও সরাসরি নেই যেভাবে আমি জানি যে echoকোনও পরিবর্তনশীল মান ডাবল-কোটগুলি ছাড়াই বিশ্বস্তভাবে মুদ্রণ করতে হবে
      • নিল উপলব্ধ করা হয় একটি forভিত্তিক কার্যসংক্রান্ত যে কাজ মান কোন উদ্ধৃতি চিহ্ন এমবেডেড হয়েছে যতদিন ; যেমন:
        set "var=^&')|;,%!" for /f "delims=" %%v in ("%var%") do echo %%~v
  • cmd.exeএকক- কোটগুলি স্ট্রিং ডিলিমিটার হিসাবে স্বীকৃতি দেয় না - এগুলিকে আক্ষরিক হিসাবে বিবেচনা করা হয় এবং এম্বেডড হোয়াইটস্পেসের সাহায্যে স্ট্রিংগুলি সীমাবদ্ধ করতে সাধারণত ব্যবহার করা যায় না; এছাড়াও, এটি অনুসরণ করে যে সিঙ্গল-কোটস এবং এর মধ্যে যে কোনও টোকেনকে অকার্যকর করে টোকেনগুলি অনুসৃত হিসাবে বিবেচিত হবে cmd.exeএবং সেই অনুসারে ব্যাখ্যা করা হবে।

    • যাইহোক, লক্ষ্যযুক্ত প্রোগ্রামগুলি শেষ পর্যন্ত তাদের নিজস্ব যুক্তি পার্সিং সম্পাদন করে, কিছু প্রোগ্রাম যেমন রুবি উইন্ডোতে এমনকি একক-উদ্ধৃত স্ট্রিংকে স্বীকৃতি দেয়; বিপরীতে, সি / সি ++ এক্সিকিউটেবল, পার্ল এবং পাইথন তাদের সনাক্ত করে না
      এমনকি যদি লক্ষ্য প্রোগ্রাম দ্বারা সমর্থিত, কিন্তু, তা না একক উদ্ধৃতিচিহ্ন সহ পংক্তি ব্যবহার করাই সমীচীন দেওয়া তাদের বিষয়বস্তু দ্বারা সম্ভাব্য অবাঞ্ছিত ব্যাখ্যা থেকে রক্ষা করা হয় না যে, cmd.exe

পাওয়ারশেলের মধ্যে থেকে উদ্ধৃতি :

উইন্ডোজ পাওয়ারশেল এর চেয়ে অনেক বেশি উন্নত শেল cmd.exeএবং এটি এখন বহু বছর ধরে উইন্ডোজের একটি অংশ হয়ে দাঁড়িয়েছে (এবং পাওয়ারশেল কোর ম্যাকওএস এবং লিনাক্সেও পাওয়ারশেলের অভিজ্ঞতা এনেছে)।

পাওয়ারশেল উদ্ধৃতি সহকারে ধারাবাহিকভাবে অভ্যন্তরীণভাবে কাজ করে:

  • ডাবল-কোটেড স্ট্রিংয়ের ভিতরে, ডাবল-কোট ব্যবহার করুন `"বা ""এড়িয়ে চলুন
  • একক-উদ্ধৃত স্ট্রিংয়ের ভিতরে, একক-উদ্ধৃতি ''থেকে বাঁচতে ব্যবহার করুন

এটি পাওয়ারশেল কমান্ড লাইনে এবং পাওয়ারশেলের মধ্যে থেকে পাওয়ারশেল স্ক্রিপ্টগুলিতে বা ফাংশনগুলিতে পরামিতিগুলি পাস করার সময় কাজ করে ।

(যেমন উপরে আলোচনা করা হয়েছে, বাইরে থেকে পাওয়ারশেলের কাছে পালিয়ে যাওয়া ডাবল-কোট পাস করার জন্য প্রয়োজন \"বা আরও দৃly়তার সাথে, \""- অন্য কোনও কিছুই কার্যকর হয় না)।

দুঃখের বিষয়, পাওয়ারশেল থেকে বাহ্যিক প্রোগ্রামগুলি গ্রহণ করার সময়, আপনি পাওয়ারশেলের নিজস্ব উদ্ধৃতি বিধি উভয়কেই সামঞ্জস্য করা এবং লক্ষ্য প্রোগ্রামের জন্য পালানোর প্রয়োজনের মুখোমুখি হলেন :

এই সমস্যাযুক্ত আচরণটিও এই উত্তরে আলোচিত এবং সংক্ষিপ্তসারিত হয়

ডাবল- কোয়েটযুক্ত স্ট্রিংগুলির ভিতরে ডাবল- কোটস :

স্ট্রিং বিবেচনা করুন "3`" of rain", যা পাওয়ারশেল-অভ্যন্তরীণভাবে আক্ষরিক অনুবাদ করে 3" of rain

আপনি যদি এই স্ট্রিংটিকে একটি বাহ্যিক প্রোগ্রামে পাস করতে চান তবে আপনাকে পাওয়ারশেলের পাশাপাশি লক্ষ্য প্রোগ্রামটির পলায়ন প্রয়োগ করতে হবে ; বলুন আপনি একটি সি প্রোগ্রামে স্ট্রিংটি পাস করতে চান, যা এম্বেড করা ডাবল-কোটগুলি এড়িয়ে যেতে পারে বলে প্রত্যাশা করে \":

foo.exe "3\`" of rain"

নোট কিভাবে উভয় `" - PowerShell খুশি করতে - এবং\ - লক্ষ্য প্রোগ্রাম খুশি করতে - বর্তমান হতে হবে।

একই যুক্তি ব্যাচ ফাইল চালনার ক্ষেত্রে প্রযোজ্য, যেখানে ""অবশ্যই এটি ব্যবহার করা উচিত:

foo.bat "3`"`" of rain"

বিপরীতে, একক- কোয়েটগুলিকে ডাবল- কোয়েটেড স্ট্রিংয়ে এম্বেড করার জন্য কোনওভাবেই পালানোর দরকার নেই।

একক ভিতরে -quotes একক -quoted স্ট্রিং না না প্রয়োজন, অতিরিক্ত পলায়নের; বিবেচনা করুন'2'' of snow', যা পাওয়ারশেলের প্রতিনিধিত্ব2' of snow

foo.exe '2'' of snow'
foo.bat '2'' of snow'

পাওয়ারশেল লক্ষ্য প্রোগ্রামে যাওয়ার আগে ডাবল-কোটেডগুলিতে একক-উদ্ধৃত স্ট্রিংগুলিকে অনুবাদ করে।

তবে, একক- উদ্ধৃত স্ট্রিংগুলির ভিতরে ডাবল- কোটগুলি , যাদের পাওয়ারশেলের জন্য পালানোর দরকার নেই , এখনও লক্ষ্য প্রোগ্রামের জন্য পালাতে হবে :

foo.exe '3\" of rain'
foo.bat '3"" of rain'

PowerShell v3 এর যাদু চালু --%বিকল্প বলা স্টপ পার্স প্রতীক , যা ব্যথা কিছু বিপদ দূর করে, কিছু পাশ করার পর এটি দ্বারা uninterpreted লক্ষ্য প্রোগ্রাম, জন্য সংরক্ষণ cmd.exe-style পরিবেশবান্ধব পরিবর্তনশীল রেফারেন্স (যেমন, %USERNAME%), যা হয় প্রসারিত; যেমন:

foo.exe --% "3\" of rain" -u %USERNAME%

কেবলমাত্র লক্ষ্যমাত্রার প্রোগ্রাম "হিসাবে এম্বেড থাকা থেকে কীভাবে পালানো সম্ভব \"(এবং পাওয়ারশেলের জন্যও নয় \`") যথেষ্ট Note

তবে, এই পদ্ধতির:

  • পরিবেশ-পরিবর্তনশীল প্রসারণ এড়াতে অক্ষরগুলি পালানোর অনুমতি দেয় না %
  • precludes সরাসরি PowerShell ভেরিয়েবল এবং অভিব্যক্তির ব্যবহার; পরিবর্তে, কমান্ড লাইনটি প্রথম ধাপে একটি স্ট্রিং ভেরিয়েবলের মধ্যে তৈরি করা আবশ্যক এবং তারপরে Invoke-Expressionএকটি সেকেন্ডে ডাকা হবে ।

সুতরাং, এর অনেক অগ্রগতি সত্ত্বেও, পাওয়ারশেল বাহ্যিক প্রোগ্রামগুলিতে কল করার সময় খুব সহজে পলায়ন করতে পারেনি। এটি অবশ্য একক-উদ্ধৃত স্ট্রিংয়ের জন্য সমর্থন চালু করেছে।

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


সুন্দর বর্ণনা! কিন্তু ... Literal use of ^ in double-quoted strings can, be problematic when applying ~ ...আসলেই না। টিলড যখন উপস্থিত থাকে তখন কেবল বাইরের উদ্ধৃতিগুলি সরিয়ে দেয়। ক্যারেটগুলি হারাতে হ্যান্ডলিংয়ের একটি সমস্যা। সাধারণত এটি set "param=%~1"সমাধান করে।
jeb

ধন্যবাদ, @ জেইব, সমস্যাটি ব্যবহারের পক্ষে আসলে নির্দিষ্ট নয় ~- আমি আমার নতুন বোঝার প্রতিফলন করতে আমার উত্তর আপডেট করেছি - দয়া করে মন্তব্য করুন, যদি আপনি কোনও সমস্যা চিহ্নিত করেন। আপনি ^যখন কোনও callবিবৃতিতে প্যারামিটারগুলি পাস করেন তখন স্বয়ংক্রিয়ভাবে দ্বিগুণ হওয়ার জন্য আপনার কী কোনও ব্যাখ্যা আছে ?
mklement0

4
আমি কেবল অনুমান করতে পারি যে এমএস-এ থাকা কেউ এটি উজ্জ্বল ভাবেন। দ্বিগুণ ক্যারেটগুলি দ্বিতীয় পার্স পর্যায়ে স্বয়ংক্রিয়ভাবে সরানো হবে। তবে এটি একটি বড় ব্যর্থতা ছিল, কারণ এটি উদ্ধৃতিগুলিতে কাজ করে না এবং এটি কার্যকরভাবে কোনও বিশেষ চরিত্রের পলায়ন রোধ করে। ভালো লেগেছে call echo cat^^&dogতাই না solveable ক্যারেট যে কোন পরিমাণ সাথে একা এর
Jeb

ধন্যবাদ, @jeb, আমি এমনকি গন্য করতে শুরু করেন unquoted ব্যবহার ^সঙ্গে callযা, হিসাবে আপনি নির্দেশ, খারাপভাবে নষ্ট হয়ে গেছে। দেখে মনে হচ্ছে call echo cat^&dog(একক ^যা সঠিকভাবে পালিয়ে যায় &) লক্ষ্য কমান্ড ( echo) কখনই আহ্বান করা হয় না (!) - পুরো কমান্ড নিঃশব্দে ব্যর্থ হয়। আমি সেই অনুযায়ী উত্তর আপডেট করেছি।
mklement0

চমৎকার উত্তর. যাইহোক, আমি ""পালিয়ে যাওয়া হিসাবে সুপারিশ করব না "তবে সর্বদা \"(সেন্টিমিটারের মধ্যে থেকে এটি কম ঝুঁকিপূর্ণভাবে ব্যবহারের জন্য আমার উত্তর দেখুন)। আমি কোনও সরকারী ডকুমেন্টেশন জানি না যা ""পালানো উদ্ধৃতি হিসাবে সংজ্ঞায়িত হয়েছে, তবে কমপক্ষে 2 এর মধ্যে উল্লেখ রয়েছে \": নেট এবং ভিএস । যদিও ভুল নথিভুক্ত করা হয়েছে, উইন 32 এপিও এই নিয়মগুলি অনুসরণ করে।
টিএস

24

গুগল শেষ পর্যন্ত উত্তর নিয়ে আসে। ব্যাচে স্ট্রিং প্রতিস্থাপনের জন্য সিনট্যাক্সটি হ'ল:

set v_myvar=replace me
set v_myvar=%v_myvar:ace=icate%

যা "আমার প্রতিলিপি" উত্পাদন করে। আমার স্ক্রিপ্টটি এখন এটির মতো দেখাচ্ছে:

@echo off
set v_params=%*
set v_params=%v_params:"=\"%
call bash -c "g++-linux-4.1 %v_params%"

যা এর সমস্ত দৃষ্টান্তের "সাথে প্রতিস্থাপন করে \", যথাযথভাবে ব্যাশের জন্য পালিয়ে যায়।


9

অতিরিক্ত হিসাবে mklement0 এর চমৎকার উত্তর :

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

SETLOCAL ENABLEDELAYEDEXPANSION
set q=\"
child "malicious argument!q!&whoami"

নোটটি SETLOCAL ENABLEDELAYEDEXPANSIONকেবল ব্যাচ ফাইলের মধ্যেই কাজ করে বলে মনে হচ্ছে। একটি ইন্টারেক্টিভ সেশনে DELAYEDEXPANSION পেতে, শুরু করুন cmd /V:ON

যদি আপনার ব্যাচফাইলটি ডিলেটডেক্সপশনটির সাথে কাজ না করে, আপনি এটি সাময়িকভাবে সক্ষম করতে পারেন:

::region without DELAYEDEXPANSION

SETLOCAL ENABLEDELAYEDEXPANSION
::region with DELAYEDEXPANSION
set q=\"
echoarg.exe "ab !q! & echo danger"
ENDLOCAL

::region without DELAYEDEXPANSION

আপনি যদি কোনও পরিবর্তনশীল থেকে গতিশীল বিষয়বস্তু পাস করতে চান তবে উদ্ধৃতিগুলি রয়েছে যা ""আপনি বর্ধিতকরণের ""সাথে প্রতিস্থাপন করতে পারবেন তা থেকে পালানো হয়েছে \":

SETLOCAL ENABLEDELAYEDEXPANSION
foo.exe "danger & bar=region with !dynamic_content:""=\"! & danger"
ENDLOCAL

এই প্রতিস্থাপনটি %...%স্টাইল বিস্তারের সাথে নিরাপদ নয় !

ওপির ক্ষেত্রে bash -c "g++-linux-4.1 !v_params:"=\"!"নিরাপদ সংস্করণ।


যদি কোনও কারণে এমনকি সাময়িকভাবে ডিলেডেএডেক্সপ্যানসেশন সক্ষম করা কোনও বিকল্প না হয় তবে এখানে পড়ুন:

\"মাঝেমধ্যে সেন্টিমিডি থেকে ব্যবহার করা কিছুটা সুরক্ষিত তবে যদি কারও কাছে কেবল কখনও কখনও পরিবর্তিত হওয়ার পরিবর্তে সর্বদা বিশেষ অক্ষরগুলি থেকে বাঁচতে হয়। (এটি একটি ক্যারেট ভুলে যাওয়ার সম্ভাবনা কম, যদি এটি সামঞ্জস্য হয় ...)

এটি অর্জনের জন্য, একটি ক্যারেট ( ^") সহ যে কোনও উদ্ধৃতি রয়েছে তার আগে , শৈশব হিসাবে শিশু প্রক্রিয়ায় পৌঁছানো উচিত এমন উদ্ধৃতিগুলি অতিরিক্তভাবে একটি ব্যাকল্যাশ ( \^") দিয়ে পালাতে হবে । সমস্ত শেল মেটা অক্ষর ^পাশাপাশি এড়াতে হবে , যেমন &=> ^&; |=> ^|; >=> ^>; ইত্যাদি

উদাহরণ:

child ^"malicious argument\^"^&whoami^"

উত্স: প্রত্যেকে কমান্ড লাইনের যুক্তিগুলি ভুল উপায়ে উদ্ধৃত করে, "উদ্ধৃতি দেওয়ার একটি আরও ভাল পদ্ধতি" দেখুন


গতিশীল বিষয়বস্তু পাস করার জন্য, নিম্নলিখিতটি নিশ্চিত করতে হবে:
কমান্ডের যে অংশে ভেরিয়েবল রয়েছে সেটিকে অবশ্যই "উদ্ধৃত" হিসাবে বিবেচনা করতে হবে cmd.exe(ভেরিয়েবলের উদ্ধৃতি থাকতে পারে - এটি লিখবেন না%var:""=\"% ) এটি অসম্ভব । এটি অর্জনের জন্য, "ভেরিয়েবলের আগে সর্বশেষ এবং ভেরিয়েবলের "পরে প্রথমটি ^-সেস্ক্যাপড হয় না । এই দু'জনের মধ্যে সেন্টিমিটার-মেটাচার্যাক্টরদের এড়ানো "উচিত নয়। উদাহরণ:

foo.exe ^"danger ^& bar=\"region with %dynamic_content% & danger\"^"

এটি নিরাপদ নয়, যদি %dynamic_content%মিল না পাওয়া যায় es


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

@ mklement0 ধন্যবাদ! হ্যাঁ, সত্যিই এটি একটি ব্যথা। এটি বিরক্তিকর এবং একটি মেটাচ্যাকার্টারকে ভুলে যাওয়া এখনও সহজ (তাই আমি বেশিরভাগ উপায়টি ব্যবহার করি !q!)। দ্রষ্টব্য: আপনার উত্তরটি আপনার শেষ সম্পাদনার পরে কিছুটা বেমানান: শীর্ষের কাছাকাছি আপনি বলেছেন: " ব্যবহার করবেন না^" "। পরে আপনি কাজের ^"অংশ হিসাবে ব্যবহার করুন । আপনি উভয় উপায় ব্যাখ্যা করতে পারে? (1) সমস্ত মেটাচার্যাক্টরগুলি (আরও পদ্ধতিগতভাবে) / (২) অব্যাহতভাবে "অব্যক্ত" অঞ্চলে মেটাচার্যাকারগুলি পলায়ন (কখনও কখনও গতিশীল বিষয়বস্তু পাস করার প্রয়োজন হয়, যেমন foo.exe ^"danger ^& bar=\"%dynamic_content%\"^"- এইভাবে চলকটি সেমিডির জন্য উদ্ধৃত করা হয়)
TS

ভালো কথা, ধন্যবাদ - উত্তর আপডেট হয়েছে। আমিও এটা পরিষ্কার কম্পাইলার যে মাইক্রোসফট উভয় গ্রহণ করেছি \"এবং ""। আরও জড়িত পরিবর্তনশীল-ভিত্তিক পদ্ধতির জন্য আমি আপনার উত্তরের সাথে লিঙ্ক করেছি। এখনই যদি তা বোধ হয় তা আমাকে জানান।
mklement0

4
@ mklement0 আপনার উত্তরটি সর্বদা বোধগম্য হয়েছে :-) আমি সম্ভাব্য উন্নতির জন্য কিছু ধারণা দিতে চেয়েছিলাম। আমি %dynamic_content%আমার উত্তরে উদাহরণও যুক্ত করেছি। আপনি কি মনে করেন যে এটি যথেষ্ট বিশদযুক্ত বা আমার আরও ব্যাখ্যা করতে হবে?
টিএস

4
শীতল, আমাকে জানাতে ধন্যবাদ। স্থানীয়করণের জন্য ভাল ধারণা setlocal delayedexpansion, তবে আপনার ব্লকটি endlocal(কোনও যুক্তি ছাড়াই) শেষ করা উচিত । সত্যিই, আমার মাথা আপনার গিস্টের দিকে তাকানো শুরু করল। আমরা এখানে সত্যিই প্রান্তের মামলাগুলি মোকাবেলা করছি এবং আমি মনে করি ভবিষ্যতের পাঠকরা আমাদের দুটি উত্তরের মধ্যে যা কিছু প্রয়োজন তা পেয়ে যাবেন।
mklement0

0

স্ট্রিং যদি ইতিমধ্যে উদ্ধৃতিগুলির মধ্যে থাকে তবে এর ক্রিয়াকলাপটি বাতিল করতে অন্য উদ্ধৃতি ব্যবহার করুন।

echo "Insert tablename(col1) Values('""val1""')" 

-3

উদাহরণস্বরূপ অবাস্তব ইঞ্জিন অটোমেশন সরঞ্জামটি ব্যাচ ফাইল থেকে চালানো - এটি আমার পক্ষে কাজ করে

উদাহরণস্বরূপ: -Cmdline = "-ম্যাসেজিং"-ডিভাইস = ডিভাইস -addCdddd = "- সেশনআইডি = সেশন-সেশনওউনার = 'মালিক' -সেশননাম = 'বিল্ড' -ডাটাপ্রোভিডারমোড = স্থানীয় -লগসিএমডিএস = 'লগকমোডিটি অফ' -অ্যাকসেসিএমডিএস = 'অটোমেশন তালিকা ; রানটসেট টেস্টগুলি + টি + টি + টি 2 দ্বারা বিভক্ত; প্রস্থান করুন '"-রুন

আশা করি এটি কাউকে সাহায্য করবে, আমার জন্য কাজ করেছে।


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