উইন্ডোজ কমান্ড প্রম্পটে অ্যাঙ্গেল বন্ধনীগুলি এড়িয়ে চলুন


94

উইন্ডোজ মেশিনে থাকা একটি ফাইলের জন্য আমার কাছে কোণ বন্ধনী (<এবং>) যুক্ত একটি স্ট্রিং প্রতিধ্বনি করা উচিত। মূলত আমি যা করতে চাই তা হল:
echo some string < with angle > brackets >>myfile.txt

কমান্ড ইন্টারপ্রেটার কোণ বন্ধনীগুলির সাথে বিভ্রান্ত হওয়ার পরে এটি কাজ করে না। আমি পুরো স্ট্রিং এর মতো উদ্ধৃতি দিতে পারে:
echo "some string < with angle > brackets" >>myfile.txt

তবে তারপরে আমার ফাইলটিতে আমার দ্বিগুণ উদ্ধৃতি রয়েছে যা আমি চাই না।

বন্ধনীগুলি অলা ইউনিক্স থেকে বেরিয়ে আসা কোনওভাবেই কাজ করে না:
echo some string \< with angle \> brackets >>myfile.txt

ধারনা?


6
উদ্ধৃতিগুলিও প্রতিধ্বনিত হবে।
ডাল

উত্তর:


170

উইন্ডোজ পলায়ন চরিত্রটি কোনও কারণে।

echo some string ^< with angle ^> brackets >>myfile.txt

10
ঠিক আছে, ব্যাকস্ল্যাশটি প্যাথনামগুলির জন্য ব্যবহৃত হয় এবং ডাবল-কোট হ'ল ফাইল নেমটি ফাঁকা রাখা যাতে ফাঁকা স্থান থাকে, তাই অনেকগুলি অক্ষরের পছন্দ বাকী নেই।
জেমস কারান 20

এটি অন্যান্য অক্ষর যেমন এম্পারস্যান্ড (এবং) এর জন্যও কাজ করে, ধন্যবাদ।
টেনফোর

4
দুর্দান্ত কাজ! echo some string ^< with angle ^> brackets >>conফলাফলগুলি: কিছু স্ট্রিং <কোণ সহ> বন্ধনী
রস ব্র্যাডবেরি

4
সমস্ত কারণ মূল পিসি ডস পাথ এবং পশ্চাদপটে সামঞ্জস্যের জন্য ব্যাকস্ল্যাশ ব্যবহার করেছিল।
জহমিক

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

25

সত্য, সরকারী পালানোর চরিত্রটি ^তবে সতর্ক থাকুন কারণ মাঝে মাঝে আপনার তিনটি ^ অক্ষর প্রয়োজন need এটি কেবল কখনও কখনও :

C:\WINDOWS> echo ^<html^>
<html>

C:\WINDOWS> echo ^<html^> | sort
The syntax of the command is incorrect.

C:\WINDOWS> echo ^^^<html^^^> | sort
<html>

C:\WINDOWS> echo ^^^<html^^^>
^<html^>

এই আওয়াজ থেকে একটি কৌশল echoআউটপুট এবং ডাবল উদ্ধৃতি সহ উদ্ধৃতি ব্যতীত অন্য একটি কমান্ড ব্যবহার করা হয় :

C:\WINDOWS> set/p _="<html>" <nul
<html>
C:\WINDOWS> set/p _="<html>" <nul | sort
<html>

নোট করুন যে এটি প্রম্পট পাঠ্যে নেতৃস্থানীয় স্পেস সংরক্ষণ করবে না।


4
পাইপগুলিকে কেন একাধিক পলায়ন প্রয়োজন তার ব্যাখ্যার জন্য আমার উত্তরের ২ য় অংশ দেখুন ।
dbenham

4
তিন ^^^এছাড়াও নভোনীল ডস / Kudu কনসোলে কমান্ড অব্যাহতি প্রয়োজন হয়।
লাইনিলো

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

8

এমন পদ্ধতি রয়েছে যা ^পালানোর ক্রম এড়ায়।

আপনি বিলম্বিত প্রসার সহ ভেরিয়েবলগুলি ব্যবহার করতে পারেন। নীচে একটি ছোট ব্যাচের স্ক্রিপ্ট প্রদর্শন রয়েছে

@echo off
setlocal enableDelayedExpansion
set "line=<html>"
echo !line!

অথবা আপনি একটি ফর / এফ লুপ ব্যবহার করতে পারেন। কমান্ড লাইন থেকে:

for /f "delims=" %A in ("<html>") do @echo %~A

বা ব্যাচের স্ক্রিপ্ট থেকে:

@echo off
for /f "delims=" %%A in ("<html>") do echo %%~A

কারণ এই পদ্ধতি কাজ কারণ উভয় বিলম্বিত সম্প্রসারণ এবং পরিবর্তনশীল বিস্তৃতির জন্য ঘটতে পরে বিশেষ অপারেটার মত <, >, &, |, &&, ||পার্স করা হয়। দেখুন উইন্ডোজ কমান্ড ইন্টারপ্রেটার (সিএমডি.এক্সই) কীভাবে স্ক্রিপ্টগুলি পার্স করে? আরও তথ্যের জন্য.


sin3.14 উল্লেখ করেছে যে পাইপগুলিতে একাধিক পলায়নের প্রয়োজন হতে পারে । উদাহরণ স্বরূপ:

echo ^^^<html^^^>|findstr .

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

পাইপ ব্যবহার করার সময় একাধিক পলায়ন এড়াতে অন্য পদ্ধতি রয়েছে is আপনি স্পষ্টভাবে নিজের সিএমডি প্রক্রিয়াটি ইনস্ট্যান্ট করতে পারেন এবং উদ্ধৃতি সহ একক পালাবার রক্ষা করতে পারেন:

cmd /c "echo ^<html^>"|findstr .

যদি আপনি পালিয়ে যাওয়া এড়াতে বিলম্বিত সম্প্রসারণ কৌশলটি ব্যবহার করতে চান, তবে আরও বিস্ময় রয়েছে (আপনি যদি সিএমডি.এক্সই এর ডিজাইনের বিশেষজ্ঞ হন তবে আপনি অবাক হবেন না, তবে কোনও সরকারী মাইক্রোসফ্ট ডকুমেন্টেশন নেই যা এই স্টাফটি ব্যাখ্যা করে)

মনে রাখবেন যে পাইপের প্রতিটি পাশই তার নিজস্ব সিএমডি.এক্সই প্রক্রিয়াতে কার্যকর করা হয়, তবে প্রক্রিয়াটি বিলম্বিত সম্প্রসারণের রাজ্যের উত্তরাধিকারী হয় না - এটি বন্ধে ডিফল্ট হয়। সুতরাং আপনাকে অবশ্যই নিজের সিএমডি.এক্সই প্রক্রিয়াটি স্পষ্টভাবে ইনস্ট্যান্ট করতে হবে এবং বিলম্বিত প্রসারণ সক্ষম করার জন্য / ভি: অন বিকল্পটি ব্যবহার করতে হবে।

@echo off
setlocal disableDelayedExpansion
set "line=<html>"
cmd /v:on /c echo !test!|findstr .

নোট করুন যে বিলম্বিত প্রসারণ প্যারেন্ট ব্যাচের স্ক্রিপ্টে বন্ধ রয়েছে।

তবে দেরীদারি প্রসারণটি মূল স্ক্রিপ্টে সক্ষম করা থাকলে সমস্ত নরক আলগা হয়ে যায়। নিম্নলিখিতগুলি কাজ করে না :

@echo off
setlocal enableDelayedExpansion
set "line=<html>"
REM - the following command fails
cmd /v:on /c echo !test!|findstr .

সমস্যাটি !test!মূল স্ক্রিপ্টে প্রসারিত, সুতরাং নতুন সিএমডি প্রক্রিয়াটি অরক্ষিত <এবং পার্স করার চেষ্টা করছে >

আপনি পালাতে পারেন !, তবে এটি জটিল হয়ে উঠতে পারে , কারণ এটি !উদ্ধৃত হয়েছে কিনা তা নির্ভর করে ।

যদি উদ্ধৃতি না দেওয়া হয়, তবে ডাবল পলায়ন প্রয়োজন:

@echo off
setlocal enableDelayedExpansion
set "line=<html>"
cmd /v:on /c echo ^^!test^^!|findstr .

যদি উদ্ধৃতি দেওয়া হয়, তবে একটি একক পালাতে ব্যবহৃত হবে:

@echo off
setlocal enableDelayedExpansion
set "line=<html>"
cmd /v:on /c "echo ^!test^!"|findstr .

তবে একটি আশ্চর্যজনক কৌশল আছে যা সমস্ত পালিয়ে যাওয়া এড়িয়ে চলে - পাইপের বাম দিকটি বদ্ধ করা পিতামহ স্ক্রিপ্টকে !test!অকাল বর্ধিত হতে বাধা দেয় :

@echo off
setlocal enableDelayedExpansion
set "line=<html>"
(cmd /v:on /c echo !test!)|findstr .

তবে আমি মনে করি এটি এমনকি নিখরচায় দুপুরের খাবার নয়, কারণ যখন প্রথম বন্ধনী ব্যবহার করা হয় তখন ব্যাচ পার্সার শেষে একটি অতিরিক্ত (সম্ভবত অযাচিত) স্থান প্রবর্তন করে।

আইন্ট ব্যাচের স্ক্রিপ্টিং মজা ;-)


3

প্রতিধ্বনি সহ উইন্ডোজে '>' এর মতো বিশেষ অক্ষর ব্যবহার করার জন্য আপনাকে এর আগে একটি বিশেষ পালানোর চরিত্র স্থাপন করতে হবে।

এই ক্ষেত্রে

echo A->B

'>' যেহেতু '' 'দ্বারা পালাতে হবে কোনও কাজ করবে না:

 echo A-^>B

আরও দেখুন সিকোয়েন্স অব্যাহতিএখানে চিত্র বর্ণনা লিখুন

একটি সংক্ষিপ্ত ব্যাচের ফাইল রয়েছে যা বিশেষ চরিত্রের একটি বেসিক সেট এবং তাদের পালানোর অনুক্রমগুলি মুদ্রণ করে।


0

বন্ধনীগুলি অলা ইউনিক্স থেকে বেরিয়ে আসা কোনওভাবেই কাজ করে না:

কিছু স্ট্রিং প্রতিধ্বনি করুন angle <কোণ সহ \> বন্ধনী >> myfile.txt

ব্যাকস্ল্যাশ একটি নিখুঁত পথের নাম হিসাবে বিবেচনা করা হবে।


4
বর্তমান ড্রাইভ চিঠির সাথে সম্পর্কিত নিখুঁত পথের নাম ...;)
ডাল

ব্যাকস্ল্যাশটিকে প্রতিধ্বনি কমান্ডের জন্য পাঠ্যের অভ্যন্তরে নিখুঁত পাথ নামের শুরু হিসাবে বিবেচনা করা হয় না - এটি কেবল সরল পাঠ যা আপনি যেখানেই পাঠান সেখানেই পাইপ হয়। - echo \ উদাহরণস্বরূপ যেমন কাজ করে। - তবে হ্যাঁ, "\" হ'ল কমান্ড-লাইন থেকে বাঁচার চরিত্রের জন্য এক অনর্থক পছন্দ, যেহেতু প্রতিটি কমান্ড / প্রোগ্রামের জন্য আপনাকে যে পথ বা ফাইলের প্রয়োজন হবে তার পরিবর্তে `\ type টাইপ করতে হবে।
BrainSlugs83

4
এই উত্তরটি, স্বীকারোক্তিযুক্ত অস্পষ্ট, প্রশ্ন
জি- এর

-2

বিশেষ অক্ষরগুলি থেকে বাঁচতে আপনি ডাবল উক্তিও ব্যবহার করতে পারেন ...

echo some string "<" with angle ">" brackets >>myfile.txt

4
যে কাজ করে না। echo some string "<" with angle ">" brackets >>conফলাফল: কিছু স্ট্রিং "<" কোণ সহ ">" বন্ধনী তবে ওপি কিছু স্ট্রিং
রস ব্র্যাডবেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.