ব্যাচ ফাইলে ভেরিয়েবলগুলি থেকে ডাবল উদ্ধৃতিগুলি সরানো সিএমডি পরিবেশের সাথে সমস্যা তৈরি করে


116

ব্যাচের ভেরিয়েবলগুলি থেকে উদ্ধৃতি অপসারণের কার্যকর এবং নিরাপদ উপায়ে কি কেউ সহায়তা করতে পারে?

আমি একটি ব্যাচ ফাইল লিখেছি যা সফলভাবে% 1,% 2,% 3 ইত্যাদি পরামিতিগুলির একটি তালিকা আমদানি করে এবং নামযুক্ত ভেরিয়েবলগুলিতে রাখে। এর মধ্যে কয়েকটি পরামিতি একাধিক শব্দ ধারণ করে এবং এর জন্য ডাবল উদ্ধৃতিতে আবদ্ধ।

> "Susie Jo" (%1)  
> "Smith Barnes" (%2)  
> "123 E. Main St." (%3)  

এই% ভেরিয়েবলগুলি পরবর্তী নামযুক্ত ভেরিয়েবলগুলিতে স্থাপন করা হয়:

> set FirstName=%1  
> set LastName=%2  
> set ShipAddr=%3  

ভেরিয়েবলের যাচাই ইকো দ্বারা সম্পন্ন হয়।

প্রতিধ্বনিত।% প্রথম নাম%
প্রতিধ্বনিত।% লাস্টনাম%
প্রতিধ্বনি।% শিপএডর%

ফলাফল হিসাবে প্রদর্শিত

"Susie Jo"  
"Smith Barnes"  
"123 E. Main St."  

আমাকে নির্বাচিত ভেরিয়েবলের অন্তর্ভুক্ত উক্তিগুলি অপসারণ করতে হবে। উদাহরণস্বরূপ, ফার্স্টনাম এবং লাস্টনাম অন্য কোথাও ব্যবহার করা হয় এবং অবশ্যই উক্তিগুলি অন্তর্ভুক্ত করা উচিত নয়।

একটি পরীক্ষার ব্যাচের ফাইলে আমি ভেরিয়েবলগুলিতে ~ টিল্ড অক্ষর ব্যবহার করে উদ্ধৃতিগুলি মুছে ফেলতে সফল হয়েছি।

> set FirstName=%~1
> set LastName=%~2 

আমি ভেবেছিলাম আমার কাছে সমাধান রয়েছে তবে আমি খুব শীঘ্রই ব্যাচ ফাইলগুলি কার্যকর করার সাথে অস্বাভাবিক আচরণের অভিজ্ঞতা পেয়েছি। হঠাৎ করে সিএমডি দীর্ঘ পথের স্ট্যাটাসগুলি স্বীকৃতি দিচ্ছে না। সম্পূর্ণ পাথ থেকে ব্যাচ ফাইলের সাধারণ সম্পাদন

> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat

আয়

> 'C:\Documents' is not recognized as an internal or external command....

সুতরাং এটি প্রদর্শিত হবে যে আগত% 1% 2 ...% n ভেরিয়েবলগুলিতে ~ টিলডে অক্ষর যুক্ত হওয়ার ফলে কিছু পরিবর্তন হয়েছে। সম্ভবত কিছু পরিবেশের পরিবর্তনগুলি পরিবর্তন করা হয়েছে?

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

এটার মতো কিছু:

for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h
set FirstName=%%~g
set LastName=%%h
echo.%FirstName% %LastName%
)

আমার মনে হয় আমার দুটি সমস্যা আছে।

1) আগত% 1% 2 ভেরিয়েবলগুলি (% ~ 1, ইত্যাদি) ~ টিলেড ofোকানোর আমার 'শর্ট অ্যান্ড মিষ্টি' ধারণাটি কিছু সেটিংসকে প্রভাবিত করেছে এবং সিএমডি কীভাবে দীর্ঘ পথের নাম নেভিগেট করে তা পরিবর্তন করেছে।

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

আরও অভিজ্ঞদের জন্য যে কোনও সহায়তা সবচেয়ে প্রশংসিত হবে। আমি এখানে আমার দক্ষতার শেষে আছি ... দয়া করে কিছু গাইডেন্স দরকার!

12/26/2009 13:36 পিএসটি সম্পূর্ণ ব্যাচ ফাইলটি সম্পাদনা করুন:

ব্লককোট
:: ডেটাআউট.ব্যাট
:: রিভিশন 12/25/2009 এম্বেডড "কোটেশন চিহ্নগুলি দূর করতে আগত% পরিবর্তনশীলগুলিতে ~ টিলড যুক্ত করুন
:: কমান্ড লাইন প্যারামিটার ব্যবহার করে ঠিকানা তালিকা লিখুন
:: কিউবুকস আইআইএফ আমদানির জন্য ডেটা আউটপুট তালিকা
লিখেছেন :: লিখেছেন আরইউআই এর জন্য মার্চেন্ট অর্ডার ডেটা
:: পরীক্ষার জন্য নমুনা কমান্ড লাইন স্ট্রিং
:: তালিকামেল [প্রথম নাম] [শেষ নাম] ["ঠিকানা স্ট্রিং"] ["শহরের স্ট্রিং"] [রাষ্ট্র] [জিপ] [আদেশ #] [পূর্চডেট] [পুনরায় নামকরণ] ["ফার্স্টনেম লাস্টনেম"] [লেনদেনআইডি] [পেমেন্টমেথোড] [মোট] [প্রোডাক্টআইডি] [পরিমাণ] [দাম_প্রতিযোগিতা] [প্যাকপ্রিপ] [শিপিং] [কমিশনপিএমটি] [চালান #]
আরইউআই এর :: উদাহরণস্বরূপ: ডেটাআউট বেলউইঙ্কল মুস "123 গ্রিন ফরেস্ট ওয়ে" "ভ্যানকুভার" ডাব্লুএ 98664 1004968 05/25/2009 "বেলউইঙ্কল মুজ" "জলপাই অয়েল" 101738 "অ্যাকাউন্টে" 20.67 এফকে -1 পি 1 8.95 3.00 1.39 239
বন্ধ @echo
CLS
C:
CD \
সিডি ডকুমেন্টস এবং সেটিংস \ প্রশাসক \ আমার দস্তাবেজগুলি \ পাঠ্য \ batchtest
প্রক্রিয়াকরণের প্রতিধ্বনি% 1% 2
: VARISET
::% N কমান্ড লাইন পরামিতিগুলিকে স্ট্রিং ভেরিয়েবলগুলিতে রূপান্তর করুন
সেট ($ ফার্স্টনেম) =% ~ 1
সেট ($ লাস্টনাম) =% ~ 2
সেট (illing বিলিংএড্রেস 1) =% ~ 3
সেট (illing বিলিংসিটি) =% ~ 4
সেট (illing বিলিংস্টেট) =% ~ 5
সেট (illing বিলিংপোস্টাল) =% ~ 6
সেট ($ অর্ডার নাম্বার) =% ~ 7
সেট (urch পূর্ব_ডেট) =% ~ 8
সেট ( istration নিবন্ধকরণের নাম) =% ~ 9
শিফ্ট
সেট ($ ট্রানজেকশনআইডি) =% ~ 9
শিফট
সেট ($ পেমেন্টমেথড) =% ~ 9
শিফট
সেট ($ মোট) =% ~ 9
শিফ্ট সেট ($ প্রোডাক্টআইডেন্টিফায়ার) =% ~ 9
শিফ্ট
সেট ( ant পরিমাণ) =% ~ 9
শিফট
সেট ($ Price_Each) =% ~ 9
শিফট
সেট ($ Pack_Prep) =% ~ 9
শিফট
সেট ($ শিপিং) =% ~ 9
শিফট
সেট ($ ServiceFee) =% ~ 9
শিফট
সেট ($ ছাড়) =% ~ 9
শিফ্ট
সেট ($ চালান) =% ~ 9
শিফট
সেট ($ ইউনিটপ্রাইস) =% ~ 9
সেট_শীপকম্বনাম =% ($ ফার্স্টনেম)%% ($ লাস্টনাম)%
ইকো শিপ কম্বো নাম% _ShipCombName%
বিরতি
:: লগফাইলে প্রতিপাদ্য স্ট্রিং ভেরিয়েবলগুলি লিখুন
এফএন% ($ ফার্স্টনেম)% এলএন% ($ লাস্টনাম)% বিএ% (illing বিলিংএড্রেস 1)%% (illing বিলিংসিটি)%% (illing বিলিংস্টেট)%% (illing বিলিংপোস্টাল)% ($ অর্ডার নাম্বার)% ((পূর্জি_ তারিখ)%% ($ নিবন্ধকরণের নাম)%% ($ লেনদেনআইডি)%% ($ পেমেন্টমেথোড)%% ($ মোট)%% ($ প্রোডাক্টআইডেন্টিফায়ার)%% (ant পরিমাণ))% ($ মূল্য_আচ)) %% ($ প্যাক_প্রিপ)%% (pping শিপিং)%% ($ সার্ভিসফাই)%% ($ ছাড়)%% ($ চালান)%% ($ ইউনিটপ্রাইস)% %_শীপকম্বনাম% >> d_out_log.txt
:: এর মাধ্যমে অ্যাকাউন্ট বরাদ্দ করুন পরিষেবা সরবরাহকারী
IF / i% (ment পেমেন্টমেথড)% == আমাজন প্রাপ্তিগুলি সেট _কিউসিএসিটি = অ্যামাজন.কম
:: 12-25-2009 বহুমুখিতা জন্য দ্বিতীয় অ্যামাজন পিএইচটি পদ্ধতি যুক্ত করেছে
IF / i% (ment পেমেন্টমেথড)% == আমাজন এসইটি _কিবিএসিএকিটি = অ্যামাজন.কম
যদি আইএফ / আমি% ($ পেমেন্টমেথোদ)% == সর্বাধিক সেট _ কিউবিএসিএকিটি = আথ / নেট
আইএফ / আই% ($ পেমেন্টমেথড)% == মাস্টারকার্ড সেট _কিবিসিএসিটি = আউথ / নেট
আইএফ / আই% ($ পেমেন্টমেথড)% == ভিসা সেট _ কিউবিসিটি =
অথথ / নেট আইএফ / আই% ($ পেমেন্টমেথড)% == পেপাল এসইটি _ কিউবিসিএসিটি = পেপালপ্যাম্টস
আইএফ / আই% ($ পেমেন্টমেথড)% == অ্যাকাউন্টে সেট করুন _কিবিএসিসিটি =% ($ নিবন্ধকরণের নাম)%
আইএফ / আই% (ment পেমেন্টমেথড) % == মেল SET _QBAcct =% ($ নিবন্ধকরণের নাম)%
IF / i% ($ পেমেন্টমেথড)% == আমার সেট _কিবিএসিসিটি = আথ / নেট
আইএফ / আই% (ment পেমেন্টমেথড)% == ডিস্ক সেট সেট _ কিউবিসিএসিটি = আথ / নেট
: : কিউবিসিএকউন্টের উপর ভিত্তি করে রেপ ডিজাইনার নিয়োগ করুন
IF / i% (ment পেমেন্টমেথড)% == আমাজন প্রাপ্তিগুলি সেট _আরপ = অ্যামাজন
:: 12-25-2009 বহুমুখিতা
IF / i% (ment পেমেন্টমেথড)% = = আমাজন এসইটি _ রেপ = আমাজন
আইএফ / আই% ($ পেমেন্টমেথড)% == সর্বাধিক সেট _ রেপ = ব্লুজ্যাপ
আইএফ / আই% ($ পেমেন্টমেথড)% == মাস্টারকার্ড সেট _আরপি = ব্লুজ্যাপ
আইএফ / আই% ($ পেমেন্টমেথড)% == ভিসা সেট _ রেপ = ব্লুজ্যাপ
আইএফ / i% (ment PaymentMethod)% == পেপাল SET _Rep = ব্লুজ্যাপ
IF / i% ($ পেমেন্টমেথড)% == অ্যাকাউন্টে SET _Rep = আরবি
IF / i% ($ পেমেন্টমেথড)% == মেল SET _Rep = আরবি
IF / i % ($ পেমেন্টমেথড)% == আমার সেট _ রেপ = ব্লুজ্যাপ
আইএফ / আই% ($ পেমেন্টমেথড)% == ডিআইএসসি সেট _আরপি = ব্লুজ্যাপ
:: সদৃশ ঠিকানা ডেটা সন্ধানের জন্য অনুসন্ধান করুন
/ i / s "% _ShipCombName%" অ্যাডরলিস্ট.txt
প্রতিধ্বনি ত্রুটিমুক্ত:% ত্রুটিযুক্ত%
যদি ত্রুটিযুক্তিটি 1 টি হয়েছে:
ত্রুটিযুক্ত 0 টি থাকলে ADDRWRITE হয়েছে: ADDRFOUND
: ADDRWRITE
প্রতিধ্বনি% _ShipCombName% >> addrlist.txt
প্রতিধ্বনি% (illing বিলিংএড্রেস 1)% >> অ্যাডরলিস্ট.টেক্সট
প্রতিধ্বনি% (illing বিলিংসিটি)%% (illing বিলিংস্টেট)%% (illing বিলিংপোস্টাল)% >> অ্যাডরলিস্ট.টেক্স
ইকো। >> addrlist.txt
প্রতিধ্বনি ফাইল ফাইল লিখিত
: ADDRFOUND
প্রতিধ্বনি নির্বাচিত প্রতিনিধি% _Rep%
প্রতিধ্বনিযুক্ত অ্যাকাউন্টটি হল:% _QBAcct%
বিরতি
:: RUI আউট
:: মার্চেন্ট অর্ডার আইডি লিখুন এবং RUI অর্ডার আইডি RUI
:: নকল RUI ডেটা পরীক্ষা করুন লেখার ক্ষেত্রে RUI.txt
সিডি ..
সিডি RegKOut
সন্ধান করুন / আমি "% (N অর্ডার নাম্বার)%" রাইটিংআরআই.টেক্সট
প্রতিধ্বনি ত্রুটিযুক্ত:% ত্রুটিযুক্ত%
যদি ত্রুটিযুক্ত 1 পেয়েছে: RUIWRITE
যদি 0 টি হয়েছে: IIFWRITE
: RUIWRITE
প্রতিধ্বনি% (% চালান) % ($ অর্ডার নাম্বার)% >> WritRUI.txt
:: শেষ লিখুন RUI
:: IIF আউট
: IIFWRITE
:: লিখিত আইপিএইচ.এস.এক্স.এক্স.এক্স.এক্স.পি.এক্স.এক্স.এফ.এস.পি.
/ টেক্সট প্রতি
ইকো ত্রুটিযুক্ত:% ত্রুটিযুক্ত%
যদি ত্রুটি-বিভ্রান্তিটি 1
পেয়ে গেছে
: শিরোনাম : শিরোনাম :
লেখ শিরোনাম, শিপ / হ্যান্ডলিং, ছাড়, পুনরায় & কমিশন ডেটা কিউবি IIF আমদানি ফাইল
প্রতিধ্বনি% ($ অর্ডার নাম্বার)%% ($ পূর্ন_ তারিখ)% চালান% ($ লেনদেনআইডি)%% _কিবিএসিএসিটি% অ্যাকাউন্ট প্রাপ্তি% ($ মোট)%% _ রিপ % >> WritIIF.txt
প্রতিধ্বনি H / P% ($ প্যাকপ্রিপ)% 1? >> WritIIF.txt
প্রতিধ্বনি এসএইচপি% ( pping শিপিং)% 1? >> WritIIF.txt
প্রতিধ্বনিত ডিআইএসসি% ($ ছাড়)% 1? >> WritIIF.txt
প্রতিধ্বনি কম% ($ সার্ভিসফাই)% 1? >> WritIIF.txt
: লাইনরেট
IF / i% ($ প্রোডাক্টআইডেন্টিফায়ার)% সমান পিএইচ -1 গেস্টবাইআরআইটিডিডিএফএস
ইকো% ($ প্রোডাক্টআইডেন্টিফায়ার)%
: WRITE_DISC
:: ছাড়ের দাম কাস্টম ভেরিয়েবল থেকে পার্স করেছেন:
প্রতিধ্বনিত% ($Idd %% ($ প্রাইস_এচ)%% (ant পরিমাণ)%? >> writeIIF.txt
এতে যান: ফাইলের শেষে
: WRITE_DEFA
: পণ্য তথ্য থেকে পার্স ডিফল্ট দাম লিখেছেন
প্রতিধ্বনি% ($ ProductIdentifier)%% ($ UNITPRICE)%% ($ পরিমাণ)%? >> writeIIF.txt গোটো
: ইওএফ
:: 3-সেকেন্ড বিলম্ব
:: টাইপ নুল | CHOICE.COM / n / সি ওয়াই / TY, 3> NUL
: ফাইলের শেষে


আপনি এটি করতে পাওয়ারশেল ব্যবহার করতে পারেন? আমি সন্দেহ করি আপনি যদি পাওয়ারশেল ব্যবহার করেন তবে আপনি আরও কিছুটা নিয়ন্ত্রণ পাবেন।
রবার্ট হার্ভে

1
আমি আপনার ব্যাচের ফাইলটি যাচাই করেছি - এটি ঠিক কাজ করে বলে মনে হচ্ছে (আমি "শিফট সেট ($ ProductIdentifier) ​​=% ~ 9" লাইন স্থির করার পরে - যা আমার মনে হয়, এটি এখানে অনুলিপি-আটকানোর একটি নিদর্শন)।
এটজ

ধন্যবাদ রবার্ট হার্ভে; আমি পাওয়ারশেলটি খাচ্ছি। আমি খুব ডাব্লু / প্রোগ্রামিং এর অভিজ্ঞতা নই .. শেখার বক্ররেখা কেমন হবে তা নিশ্চিত নয়। আমার কাছে ডাব্লু / ব্যাচ ফাইলের কিছু অভিজ্ঞতা আছে, যার মূল কারণ আমি এটিকে বেছে নিয়েছি। আমি ব্যাচটি সংকলন করতে চাইছি যাতে এটি দ্রুত চলে। প্রতিক্রিয়া জন্য ধন্যবাদ।
ববিবি

থ্যাঙ্কস এটজ: আমি তখন থেকে এই ব্যাচের ফাইলটি আরও কিছুটা পরীক্ষা করে দেখেছি এবং আমি দৃ confident়ভাবে আত্মবিশ্বাসী যে ~ টিলড এবং নিষেধাজ্ঞার উদ্ধৃতিগুলি সিএমডি সমস্যার সাথে সম্পর্কিত নয় / দীর্ঘ পথের নাম। আমি দীর্ঘ পথের নামগুলি মুছে ফেলার জন্য মূলটির নিকটে একটি শর্ট-নাম সাব-ডাইরেক্টরি সেট করে এটিকে নিয়ে কাজ করেছি।
ববিবি

পূর্ণ ব্যাচের ফাইলটি দেখানোর দরকার নেই। আপনার প্রশ্নটি ছোট করুন।
jor

উত্তর:


192

আপনার শেষে একটি অতিরিক্ত ডাবল উদ্ধৃতি রয়েছে, যা এটি আবার স্ট্রিংয়ের শেষে যুক্ত করছে (স্ট্রিং থেকে উভয় উদ্ধৃতি অপসারণের পরে)।

ইনপুট:

set widget="a very useful item"
set widget
set widget=%widget:"=%
set widget

আউটপুট:

widget="a very useful item"
widget=a very useful item

দ্রষ্টব্য: "একক উদ্ধৃতি" সহ ডাবল কোটগুলি প্রতিস্থাপন করতে নিম্নলিখিতটি করুন:

set widget=%widget:"='%

দ্রষ্টব্য: ববির সাথে "ওয়ার্ল্ড" শব্দটি প্রতিস্থাপন করতে (কেস সংবেদনশীল নয়) নিম্নলিখিতটি করুন:

set widget="Hello World!"
set widget=%widget:world=BobB%
set widget

আউটপুট:

widget="Hello BobB!"

আপনার প্রাথমিক প্রশ্ন যতদূর যায় (নিম্নলিখিত কোডটি একটি ব্যাচের ফাইলে সংরক্ষণ করুন। সিএমডি বা .বাট এবং রান করুন):

@ECHO OFF
ECHO %0
SET BathFileAndPath=%~0
ECHO %BathFileAndPath%
ECHO "%BathFileAndPath%"
ECHO %~0
ECHO %0
PAUSE

আউটপুট:

"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"
C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd
"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"
C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd
"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"
Press any key to continue . . .

%0লিখিত নাম এবং পথ।
%1প্রথম কমান্ড লাইন আর্গুমেন্ট এবং অন্যান্য।


ধন্যবাদ, আমি যা করেছি তার পরে SET BathFileAndPath=%~0SET BathFileAndPath=%~1
এটিই

আপনি ব্যাখ্যা করতে পারেন কেন %widget:"=%উদ্ধৃতি চিহ্নগুলি থেকে মুক্তি পাওয়া যায়?
কোডি বাগস্টাইন

4
@ ইম্রাই - দ্য :old=newভেরিয়েবল প্রসারণের একটি প্যাটার্ন ম্যাচ এবং প্রতিস্থাপন। সঙ্গে "হিসাবে oldএবং হিসাবে কিছুই new, কোট সরিয়ে ফেলা হয়, এমনকি যদি তারা মাঝখানে হয়, এমনকি যদি তারা ভারসাম্যহীন হয়।
জেসি চিশলম

উইজেট সেট করুন =% উইজেট: "=% এর একটি অদ্ভুত আচরণ রয়েছে যখন উইজেট ফাঁকা থাকে, ফিরে আসে" = "
রাহুল মিসরা

43

আপনার উপসংহার (1) ভুল মনে হচ্ছে। খেলতে অবশ্যই অন্য কিছু ফ্যাক্টর থাকতে হবে।

ব্যাচ ফাইলের পরামিতিগুলিতে উদ্ধৃতিগুলির সমস্যাটি সাধারণত কোটগুলি মুছে ফেলা %~এবং তারপরে যথাযথভাবে ম্যানুয়ালি ফিরিয়ে দিয়ে সমাধান করা হয় ।

উদাহরণ:

set cmd=%~1
set params=%~2 %~3

"%cmd%" %params%

চারপাশে উদ্ধৃতি নোট করুন %cmd% । এগুলি ছাড়া স্পেস সহ পথ চলবে না।

আপনি যদি আপনার পুরো ব্যাচ কোডটি পোস্ট করতে পারেন তবে সম্ভবত আরও নির্দিষ্ট উত্তর দেওয়া যেতে পারে answer


1
আমি একমত; আমার কাছে সেট ভার =% ~ 1 ঠিক কাজ করা উচিত বলে মনে হচ্ছে। আমি অনুরোধ হিসাবে পুরো ব্যাচ ফাইল পোস্ট করব।
ববিবি

এমএস রেফারেন্স: ব্যাচ প্যারামিটার ব্যবহার করে । কে জানত এত সংশোধক আছে? রেফারেন্সের জন্য, অফিসিয়াল এমএস ডকটি %~1হিসাবে বর্ণনা দেয়Expands %1 and removes any surrounding quotation marks ("").
cod3monk3y

@ cod3monk3y এছাড়াও, cmdএই পরিবর্তনকারীগুলির সম্পর্কে নিজেকে জিজ্ঞাসা করা সম্ভব : call /?প্যারামিটার সংশোধকগুলির জন্য, পরিবর্তনশীল সংশোধকগুলির জন্য সহায়তা set /?(সম্ভবত খুব স্বজ্ঞাত নয়)। বেশ সহজ।
atzz

12

আমি সাধারণত আমার ভেরিয়েবলগুলি থেকে সমস্ত উদ্ধৃতিগুলি এর সাথে সরিয়ে ফেলি:

set var=%var:"=%

এবং তারপরে আমার যেখানে যেখানে প্রয়োজন প্রয়োজন সেগুলি আবার প্রয়োগ করুন:

echo "%var%"

প্রথমে এ নিয়ে আমারও সমস্যা হয়েছিল, পরিণত হয়েছিল আমি :একটি হিসাবে .দেখছিলাম - এটি বের করার পরে, কোনও বাধা ছাড়াই কাজ করেছে worked দুর্দান্ত টিপ!
ডেভু

9

একটি সহজ উপায়ে এটি করার চেষ্টা করে প্রচুর সময় ব্যয় করেছেন। ফর লুপটি যত্ন সহকারে দেখার পরে, আমি বুঝতে পেরেছি যে কোডের এক লাইন দিয়ে আমি এটি করতে পারি:

FOR /F "delims=" %%I IN (%Quoted%) DO SET Unquoted=%%I

উদাহরণ:

@ECHO OFF
SET Quoted="Test string"

FOR /F "delims=" %%I IN (%Quoted%) DO SET Unquoted=%%I

ECHO %Quoted%
ECHO %Unquoted%

আউটপুট:

"Test string"
Test string

"এসইটি কোটড = টেস্ট স্ট্রিং" থাকা অবস্থায় এই পদ্ধতিটি প্রাসঙ্গিক নয়। পরের প্রশ্নটি কীভাবে পৃথক হবে "(দ্বিগুণ উদ্ধৃতি) অস্তিত্ব আছে বা নেই। যার সম্পর্কে উদ্বিগ্ন হতে পারে, আপনাকে অগ্রিম ধন্যবাদ
রাহক কাহার

3

এটি এমন কোনও সরল বাগের মতো শোনাচ্ছে যেখানে আপনি% using ব্যবহার করছেন যেখানে কোথাও আপনার হওয়া উচিত নয়। % ~ ব্যাচ ফাইলগুলি যেভাবে কাজ করে তা মৌলিকভাবে পরিবর্তন না করে যদি ব্যবহার করে তবে এটি সেই একক পরিস্থিতিতে স্ট্রিং থেকে উদ্ধৃতিগুলি সরিয়ে দেয়।


3

আমি এই লিঙ্কটি থেকে শিখেছি , আপনি যদি এক্সপি বা তার বেশি ব্যবহার করেন তবে এটি কেবল নিজের দ্বারা কাজ করবে:

SET params = %~1

উইন্ডোজ 7 এ কাজ করার জন্য আমি এখানে অন্য কোনও সমাধান পেতে পারি নি।

তাদের উপর পুনরাবৃত্তি করতে, আমি এটি করেছি:

FOR %%A IN (%params%) DO (    
   ECHO %%A    
)

দ্রষ্টব্য: আপনি কেবলমাত্র ডাবল উদ্ধৃতি পাবেন যদি আপনি কোনও স্থান দ্বারা সাধারণত পৃথক যুক্তিগুলি পাস করেন।


0
  1. উইজেট সেট করুন = "একটি খুব দরকারী আইটেম"
  2. উইজেট সেট করুন
  3. উইজেট = "একটি খুব দরকারী আইটেম"
  4. উইজেট =% উইজেট সেট করুন: "=%"
  5. উইজেট সেট করুন
  6. উইজেট সেট করুন = একটি খুব দরকারী আইটেম "

"৪ নং লাইনের অনুগামী উদ্ধৃতিটি "স্ট্রিংয়ে একটি উক্তি যুক্ত করছে। এটি অপসারণ করা উচিত। লাইন 4 এর বাক্য গঠনটি শেষ হয়%


@ ব্যবহারকারী195488 - 3 টি রেখাটি পড়ুন যেমনটি এটি প্রদর্শিত হয়েছে:widget="a very useful item" এবং 6 টি লাইনটি এটি প্রদর্শিত হবে তা পর্যবেক্ষণ করুন:widget=a very useful item" এবং বুঝতে হবে যে লাইন 7 হবে set widget=%widget:"=%এবং 8 লাইনটি পর্যবেক্ষণ করবে যে প্রদর্শিত রেখার widget=a very useful itemআর কোনও চলমান উদ্ধৃতি নেই
জেসি চিশলম

0

আমি ভেবেছিলাম আমার কাছে সমাধান রয়েছে তবে আমি খুব শীঘ্রই ব্যাচ ফাইলগুলি কার্যকর করার সাথে অস্বাভাবিক আচরণের অভিজ্ঞতা পেয়েছি। হঠাৎ করে সিএমডি দীর্ঘ পথের স্ট্যাটাসগুলি স্বীকৃতি দিচ্ছে না। সম্পূর্ণ পাথ থেকে ব্যাচ ফাইলের সাধারণ সম্পাদন

সি: \ ডকুমেন্টস এবং সেটিংস \ প্রশাসক \ আমার নথিগুলি \ টেক্সট \ ব্যাচেষ্টেস্ট \ ডেটাআউট.ব্যাট

আয়

'সি: \ ডকুমেন্টস' কোনও অভ্যন্তরীণ বা বাহ্যিক আদেশ হিসাবে স্বীকৃত নয় ...

আপনার পুরো সমস্যা আছে। সিএমডি কমান্ড লাইন থেকে ফাইলের ভিতরে থাকা জায়গাগুলি বুঝতে পারে না, সুতরাং এটি মনে করে যে আপনি পাস করার চেষ্টা করছেন

এবং সেটিংস \ প্রশাসক \ আমার দস্তাবেজগুলি xt Txt \ ব্যাচেষ্টেস্ট \ ডেটাআউট.ব্যাট

পরামিতি হিসাবে

"সি: \ ডকুমেন্টস"

কার্যক্রম.

পাথ ফাঁকা জায়গাগুলি সহ একটি ব্যাচ ফাইল চালানোর জন্য আপনাকে এটিকে উদ্ধৃত করতে হবে:

> "C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat"

কাজ হত।


0
@echo off

Setlocal enabledelayedexpansion

Set 1=%1

Set 1=!1:"=!

Echo !1!

Echo "!1!"

Set 1=

মূল প্যারামিটারে কোট রয়েছে কিনা তা নির্বিশেষে কোটসের সাথে বা ছাড়াই তা প্রদর্শন করে।

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

যদি '% 1' == '' আপনার হোস্ট হয়

তবে যদি এমন কোনও ফাইলের অস্তিত্বের জন্য পরীক্ষা করা হয় যার উদ্ধৃতি থাকতে পারে বা নাও থাকে তবে তা হ'ল

যদি উপস্থিত থাকে "! 1!" অন্যের কাছে যাও

একক উদ্ধৃতি এবং ডাবল উদ্ধৃতি ব্যবহার পৃথক পৃথক পৃথক।


0

সমস্ত উত্তর সম্পূর্ণ। তবে একটি জিনিস যুক্ত করতে চেয়েছিলেন,

প্রথম নাম =% set 1 সেট করুন

সর্বশেষ নাম =% ~ 2 সেট করুন

এই লাইনটি কাজ করা উচিত ছিল, আপনি একটি ছোট পরিবর্তন প্রয়োজন।

"প্রথম নাম =% ~ 1" সেট করুন

"সর্বশেষ নাম =% ~ 2" সেট করুন

উদ্ধৃতিগুলির মধ্যে সম্পূর্ণ অ্যাসাইনমেন্ট অন্তর্ভুক্ত করুন। এটি কোনও সমস্যা ছাড়াই উদ্ধৃতিগুলি সরিয়ে ফেলবে। এটি অ্যাসাইনমেন্টের একটি পছন্দের উপায় যা যুক্তি অনুসারে উদ্ধৃতি সহ অযাচিত সমস্যাগুলি সমাধান করে।


0

সরল টিলড সিনট্যাক্স কেবলমাত্র কমান্ড লাইন পরামিতিগুলি ব্যাচের ফাইলগুলিতে পাস করার সাথে সাথে উদ্ধৃতি চিহ্নগুলি সরাতে কাজ করে

SET xyz=%~1

উপরের ব্যাচ ফাইল কোডটি প্রথম প্যারামিটার হিসাবে নেতৃস্থানীয় এবং অনুচ্ছেদে উদ্ধৃতিগুলি (যদি উপস্থিত থাকে) সরিয়ে প্রথম মান হিসাবে যা যা করা হচ্ছে তাতে xyz সেট করবে।

তবে, এই সাধারণ টিলড সিনট্যাক্সটি প্যারামিটার হিসাবে পাস করা হয়নি এমন অন্যান্য ভেরিয়েবলগুলির জন্য কাজ করবে না

অন্যান্য সমস্ত ভেরিয়েবলের জন্য, আপনার প্রসারিত প্রতিস্থাপন সিনট্যাক্স ব্যবহার করতে হবে যা আপনাকে মুছে ফেলার জন্য শীর্ষস্থানীয় এবং পিছিয়ে থাকা অক্ষর নির্দিষ্ট করতে হবে। কার্যকরভাবে আমরা প্রথম এবং শেষ চরিত্রটি আসলে কী তা না দেখিয়ে সরিয়ে ফেলার নির্দেশ দিচ্ছি।

@SET SomeFileName="Some Quoted file name"
@echo %SomeFileName% %SomeFileName:~1,-1%

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

@SET VAR="Some Very Long Quoted String"
If aa%VAR:~0,1%%VAR:~-1%aa == aa""aa SET UNQUOTEDVAR=%VAR:~1,-1%
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.