बैच फ़ाइल में चर से दोहरे उद्धरणों को हटाने से सीएमडी पर्यावरण के साथ समस्याएं पैदा होती हैं


116

क्या बैच चर से उद्धरण हटाने के प्रभावी और सुरक्षित तरीके से कोई मदद कर सकता है?

मैंने एक बैच फ़ाइल लिखी है जो सफलतापूर्वक मापदंडों 1,% 2,% 3 आदि की सूची आयात करती है और उन्हें नामित चर में रखती है। इनमें से कुछ मापदंडों में कई शब्द हैं, और इसके लिए दोहरे उद्धरण चिह्नों में संलग्न हैं।

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

इन% चर को अगले नामांकित चर में रखा गया है:

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

चर का सत्यापन प्रतिध्वनि द्वारा किया जाता है।

गूंज।% FirstName%
गूंज।% अंतिम नाम%
गूंज।% ShipAddr%

परिणाम के रूप में प्रदर्शित

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

मुझे चयनित चर पर शामिल उद्धरणों को समाप्त करने की आवश्यकता है। उदाहरण के लिए, FirstName और LastName का उपयोग कहीं और किया जाता है और इसमें उद्धरण शामिल नहीं होने चाहिए।

एक परीक्षण बैच फ़ाइल में मैं चर में ~ टिल्ड चरित्र का उपयोग करके उद्धरणों को समाप्त करने में सफल रहा।

> 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 के लिए ~ tilde वर्ण के अलावा ...% 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, आदि) में ~ टिल्ड डालने का मेरा 'छोटा और मीठा' विचार कुछ सेटिंग्स को प्रभावित करता है और लगता है कि कैसे सीएमडी लंबे पैथनाम को नेविगेट करता है।

2) मैं अभी भी चयनित नामित चर से उद्धरण को खत्म करने के लिए एक साफ और आसान तरीके की तलाश में हूं।

उन अधिक अनुभवी लोगों के लिए कोई मदद सबसे अधिक सराहना की जाएगी। मैं अपने कौशल के अंत में यहाँ हूँ ... कृपया कुछ मार्गदर्शन की आवश्यकता है!

सम्पूर्ण बैच फ़ाइल 12/26/2009 13:36 पीएसटी संपादित करें:

Blockquote
:: dataout.bat
:: revision 12/25/2009 ~ "अंतर्निहित चिह्न" उद्धरण चिह्नों को समाप्त करने के लिए आने वाले% चरों में tilde जोड़ें।
:: कमांड लाइन मापदंडों का उपयोग करके पता सूची
लिखते हैं :: QBooks IIF आयात के लिए डेटा आउटपुट सूची
लिखते हैं :: लिखते हैं RUI के लिए मर्चेंट ऑर्डर डेटा
:: परीक्षण के लिए नमूना कमांड लाइन स्ट्रिंग
:: सूची [firstname] [lastname] ["एड्रेस स्ट्रिंग"] ["शहर स्ट्रिंग"] [राज्य] [zip] [आदेश #] [प्रयोजन] [Regname] ["FirstName LastName"] [TransactionID] [PaymentMethod] [कुल] [ProductID] [मात्रा] [Price_Each] [PackPrep] [शिपिंग] [CommissionPmt] [चालान] [
:: उदाहरण: डेटाआउट बेलेविंकल मूस "123 ग्रीन फ़ॉरेस्ट वे" "वैंकूवर" डब्ल्यूए 98664 1004968 05/25/2009 "बेलेविंकल मूस" "ऑलिव ओयल" 101738 "अकाउंट पर" 20.67 FK-1P 1 8.95 3.00 1.39 239
@echo बंद
cls।
c:
cd \
cd डॉक्युमेंट्स और सेटिंग्स \ एडमिनिस्ट्रेटर \ my \ txt \ बैचटैस्ट
इको प्रोसेसिंग% 1% 2
: VARISET
::% N कमांड लाइन पैरामीटर को स्ट्रिंग चर
सेट ($ FirstName) =% ~ 1
सेट ($ LastName) =% ~ 2
सेट ($ BillingAddress1) =% ~ 3
सेट ($ BillingCity) =% / 4
सेट ($ BillingState) में कनवर्ट करें। =% ~ ५
सेट ($ बिलिंगपोस्टल) =% ~ ६
सेट ($ ऑर्डरनंबर) =% ~
ch सेट ($ पर्स_डेट) =% ~
(सेट ($ पंजीकरण नाम) =% ~ ९
पारी
सेट ($ TransactionID) =% ~ ९
शिफ्ट
सेट ($ PaymentMethod) =% ~ ९
पारी
सेट ($ कुल) =% ~ ९
पारी सेट ($ ProductIdentifier) ​​=% ~ ९
शिफ्ट
सेट ($ मात्रा)% ~ ९
पारी
सेट ($ Price_Each) =% ~ ९
पारी
सेट ($ Pack_Prep) =% ~ ९
पारी
सेट ($ शिपिंग) =% ~ ९
पारी
सेट ($ ServiceFee) =% ~ ९
पारी
सेट ($ डिस्काउंट) = ९ ~ ९
पारी
सेट ($ चालान) =% ~ ९
पारी
सेट ($
यूनिटप्राइस ) =% ~ ९ सेट _ShipCombName =% ($ FirstName)%% ($ अंतिम नाम)%
इको शिप कॉम्बो नाम% _ShipCombName%
ठहराव है
::
लॉग वैरिएबल इको FN% ($ FirstName)% LN% ($ लास्टनाम)% BA% ($ BillingAddress1)%% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)%% ($ $) का स्ट्रिंग संस्करण लिखें। ऑर्डरनंबर)%% ($ Purch_Date)%% ($ RegistrationName)%% ($ TransactionID)%% ($ PaymentMethod)%% ($ कुल)%% ($ ProductIdentifier)%% ($ मात्रा)%% ($ Price_Each) %% ($ Pack_Prep)%% ($ शिपिंग)%% ($ ServiceFee)%% ($ डिस्काउंट)%% ($ चालान)%% ($ UnitPrice)%% _ShipCombName%: d_out_log.txt
:: असाइन खाता द्वारा असाइन करें सेवा प्रदाता
IF / i% ($ PaymentMethod)% == अमेज़ॅन प्राप्तकर्ता SET _QBAcct = Amazon.com
:: 12-25-2009 जोड़ा गया दूसरा अमेज़न pmatility के लिए विधि
IF / i% ($ PaymentMethod)% = Amazon SET _QBAcct = Amazon.com
IF / i% ($ PaymentMethod)% == MAST SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == मास्टरकार्ड SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == वीज़ा सेट _QBAcct = प्रामाणिक / नेट
IF /% ($ PaymentMethod)% == पेपल सेट _QBAcct = PayPalPmts
IF / i% ($ PaymentMethod)% == ऑन अकाउंट SET _QBAcct =% ($ RegistrationName)%
IF / i% ($ PaymentMethod)% == मेल SET _QBAcct =% ($ RegistrationMame)%
IF / i% $ PaymentMethod)% == AMER SET _QBAcct = Auth / Net
IF / i% ($ PaymentMethod)% == DISC सेट _QBAcct = Auth / Net
:: QBAccount
IF / i% ($ PaymentMethod)% = पर आधारित निरूपित प्रतिनिधि पदनाम। Amazon Receivables SET _Rep = Amazon
:: 12-25-2009 ने बहुमुखी प्रतिभा के लिए दूसरा अमेज़न pm't जोड़ा विधि
IF / i% ($ PaymentMethod)% == Amazon SET _Rep = Amazon
IF / i% ($ PaymentMethod)% == MAST SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == मास्टरकार्ड SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == Visa SET _Rep = BlueZap
IF / i% ($ PaymentMethod)% == पेपल सेट _Rep = BlueZap
IF / i i% ($ PaymentMethod)% == खाता SET _Rep = RB
IF / i% ($ PaymentMethod)% == मेल SET _Rep = RB
IF / i% ($ PaymentMethod)% == AMER SET _Rep = BlueZap
IF / i % ($ PaymentMethod)% == DISC SET _Rep = BlueZap
:: डुप्लिकेट एड्रेस डेटा की जांच के लिए जांच करें पता
/ i / s "% _ShipCombName%" addrlist.txt
echo errorlevel:% errorlevel%
अगर errorlevel 1 goto: ADDRWRITE
यदि त्रुटि हो तो 0: ADDRFOUND
: ADDRWRITE
गूंज% _ShipCombName% >> addrlist.txt
echo% ($ BillingAddress1)% >> addrlist.txt
echo% ($ BillingCity)%% ($ BillingState)%% ($ BillingPostal)% >> addrlist.txt
इको। >> addrlist.txt
इको एड्रेस फाइल लिखा गया
: ADDRFOUND
इको चयनित प्रतिनिधि% _Rep%
इको चयनित खाता है:% _QBAcct%
pause
:: RUI OUT
:: राइट टू मर्चेंट ऑर्डर आईडी और EUI ऑर्डर आईडी को RUI
:: डुप्लिकेट RUI डेटा की जांच करें in writeRUI.txt
cd ..
cd RegKOut
find / i "% ($ ऑर्डरनंबर)%" राइटरयूआईईटीईटी
इको एररवेल्ड :% एररलेवल %
अगर इफलोवेलेट 1 गोटो: रिउविराइट इ सिटेलवेल
0 गोटो: IIFWRITE
: RUIWRITE
इको% ($ इनवॉइस)% % ($ ऑर्डरनंबर)% >> writeRUI.txt
:: end लिखना RUI
:: IIF OUT
: IIFWRITE
:: राइट इनवाइट डुप्लिकेट इनवॉइस के लिए जाँच करें inIIF.txt
/ i "% ($ ऑर्डरनंबर)%" राइट आईआईएफ.ई.टी.
इको एररवेलेवल :%
iflevel%%
अगर एररवल 1 गेदो: HEWWRITE अगर एररवेले 0 गोटो: LINEWRITE
: HEADWRITE
:: राइट हैडर, जहाज / हैंडलिंग, छूट, QB IIF आयात फ़ाइल के लिए
रिपॉजिट और कमीशन डेटा इको% ($ ऑर्डरनंबर)%% ($ Purch_Date)% चालान% ($ लेन-देन)%% _QBAcctc खाते के प्राप्य% ($ कुल)% _Rep % >> writeIIF.txt
echo H / P% ($ Pack_Prep)% 1? >> writeIIF.txt
इको SHP% ($ शिपिंग)% 1? >> writeIIF.txt
echo DISC% ($ डिस्काउंट)% 1? >> writeIIF.txt
इको कॉम% ($ ServiceFee)% 1? >> writeIIF.txt
: LINEWRITE
IF / i% ($ ProductIdentifier)% PH PH-1 गोटो WRITE_DEFA ELSE गोटो WRITE_DISC
इको% ($ ProductIdentifier)%
: WRITE_DISC
:: कस्टम वेरिएबल से पार्स की गई रियायती कीमतों को लिखते हैं:
इको% ($ ProductDentifier) %% ($ Price_Each)%% ($ मात्रा)%? >> writeIIF.txt
गोटो: EOF
: WRITE_DEFA
: उत्पाद डेटा
गूंज% ($ ProductIdentifier)%% ($ UnitPrice)%% ($ मात्रा)% से पार्इ गई डिफ़ॉल्ट कीमतें लिखता है ? >> writeIIF.txt
गोटो: EOF
:: 3-सेकंड की देरी
:: TYPE NUL | CHOICE.COM / N / CY / TY, 3> NUL
: EOF


क्या आप ऐसा करने के लिए PowerShell का उपयोग कर सकते हैं? मुझे संदेह है कि यदि आप PowerShell का उपयोग करते हैं तो आपको थोड़ा और नियंत्रण मिलेगा।
रॉबर्ट हार्वे

1
मैंने आपकी बैच फ़ाइल को चेक किया - यह ठीक काम करने लगता है (जब मैंने लाइन "शिफ्ट सेट ($ ProductIdentifier) ​​=% ~ 9" तय की - जो मुझे लगता है, यह यहाँ कॉपी-पेस्ट करने की एक कला है)।
प्रातः

धन्यवाद रॉबर्ट हार्वे; मैं पॉवरशेल पर नजर गड़ाए हुए हूं। मैं बहुत अनुभव w / प्रोग्रामिंग नहीं हूँ .. यकीन नहीं है कि सीखने की अवस्था क्या होगी। मेरे पास कुछ अनुभव w / बैच फाइलें हैं, मुख्य कारण मैंने इसे चुना। मैं बैच संकलित करने का इरादा कर रहा हूं इसलिए यह तेजी से चलेगा। प्रतिक्रिया के लिए धन्यवाद।
BobB

धन्यवाद atzz: मैंने तब से इस बैच फ़ाइल का कुछ और परीक्षण किया है और मुझे पूरा विश्वास है कि ~ टिल्डे और लुप्त होने वाले उद्धरण सीएमडी समस्या w / लंबे पथनामों से असंबंधित हैं। मैंने लंबे पथनामों को समाप्त करने के लिए रूट के करीब एक लघु-नाम उपनिर्देशिका स्थापित करके चारों ओर काम किया।
BobB

पूर्ण बैच फ़ाइल दिखाने की आवश्यकता नहीं है। कृपया अपने प्रश्न को छोटा करें।
जोर

जवाबों:


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!"

जहाँ तक आपका प्रारंभिक प्रश्न है (निम्न कोड को बैच फ़ाइल में सहेजें। cmd या .bat और run)।

@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=%~0(वास्तव में, मेरा परम सरणी 1 से शुरू होता है इसलिए मैंने इस्तेमाल कियाSET BathFileAndPath=%~1
वलमास

क्या आप समझा सकते हैं कि %widget:"=%उद्धरण चिह्नों से छुटकारा क्यों मिलता है?
कोडीबगस्टीन

4
@ आईरे - :old=newएक पैटर्न मिलान और परिवर्तनशील विस्तार में प्रतिस्थापन है। साथ "के रूप में oldऔर के रूप में कुछ भी नहीं है new, उद्धरण निकाल दिए जाते हैं, भले ही वे बीच में हैं, भले ही वे असंतुलित कर रहे हैं।
जेसी चिशोल्म

विजेट सेट करें =% विजेट: "=% का अजीब व्यवहार होता है जब विजेट खाली होता है, तो यह =" "
राहुल मिश्रा

43

आपका निष्कर्ष (1) गलत लगता है। खेलने के लिए कुछ अन्य कारक होना चाहिए।

बैच फ़ाइल मापदंडों में उद्धरण की समस्या आम तौर पर उद्धरण को हटाने %~और फिर उन्हें मैन्युअल रूप से जहां उपयुक्त हो, डालकर हल किया जाता है।

उदाहरण के लिए:

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

"%cmd%" %params%

चारों ओर उद्धरण ध्यान दें %cmd%। उनके बिना, रिक्त स्थान के साथ पथ काम नहीं करेगा।

यदि आप अपना पूरा बैच कोड पोस्ट कर सकते हैं, तो शायद अधिक विशिष्ट उत्तर दिया जा सकता है।


1
मैं राज़ी हूँ; मुझे लगता है कि सेट var =% ~ 1 को बस ठीक काम करना चाहिए। मैं अनुरोध के रूप में पूरी बैच फ़ाइल पोस्ट करूंगा।
BobB

एमएस संदर्भ: बैच मापदंडों का उपयोग करना । कौन जानता था कि इतने सारे संशोधक थे? संदर्भ के लिए, आधिकारिक एमएस डॉक के %~1रूप में का वर्णन देता हैExpands %1 and removes any surrounding quotation marks ("").
कोड 3 नोम 3

@ cod3monk3y इसके अलावा, cmdइन मॉडिफायर्स के बारे में खुद से पूछना संभव है : call /?पैरामीटर्स मॉडिफायर पर मदद के set /?लिए , वैरिएबल मॉडिफायर के लिए (शायद बहुत सहज नहीं)। काफी आसान है।
atzz

12

मैं आमतौर पर अपने चर से सभी उद्धरण हटाता हूं:

set var=%var:"=%

और फिर उन्हें फिर से लागू करें जहाँ भी मुझे उनकी आवश्यकता है जैसे:

echo "%var%"

मैं भी पहली बार में यह समस्या आई बाहर मैं देख रहा था बदल गया :एक के रूप में .- कि बाहर, बिना किसी बाधा के काम लगाना के बाद। महान टिप!
डेवू

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

यह विधि प्रासंगिक नहीं है, जबकि "सेट कोटेड = टेस्ट स्ट्रिंग"। अगला सवाल यह है कि अलग कैसे होता है "(दोहरा उद्धरण) मौजूद है या नहीं। किससे संबंधित हो सकता है, आपको उन्नत में धन्यवाद।
Rhak Kahr

3

यह एक साधारण बग की तरह लगता है जहाँ आप% ~ का उपयोग कर रहे हैं जहाँ आप नहीं होना चाहिए। यदि% ~ का उपयोग मूलभूत रूप से बैच फ़ाइलों के काम करने के तरीके को नहीं बदलता है, तो यह उस एकल स्थिति में स्ट्रिंग से उद्धरण हटा देता है।


3

मैंने इस लिंक से सीखा , यदि आप XP या अधिक से अधिक का उपयोग कर रहे हैं, तो यह केवल अपने आप काम करेगा:

SET params = %~1

मुझे विंडोज 7 पर काम करने के लिए यहां कोई अन्य समाधान नहीं मिला।

उन पर पुनरावृति करने के लिए, मैंने यह किया:

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

नोट: यदि आप आमतौर पर किसी स्थान से अलग किए गए तर्कों में पास हो जाते हैं तो आपको केवल दोहरे उद्धरण मिलेंगे।


0
  1. सेट विजेट = "एक बहुत ही उपयोगी वस्तु"
  2. विजेट सेट करें
  3. विजेट = "एक बहुत उपयोगी वस्तु"
  4. सेट विजेट =% विजेट: "=%"
  5. विजेट सेट करें
  6. सेट विजेट = एक बहुत ही उपयोगी आइटम "

"पंक्ति 4 में अनुगामी उद्धरण "स्ट्रिंग में एक उद्धरण जोड़ रहा है । इसे हटाया जाना चाहिए। पंक्ति 4 के लिए वाक्य रचना के साथ समाप्त होता है%


@ user195488 - पंक्ति 3 पढ़ें जैसा कि यह प्रदर्शित होता है:widget="a very useful item" और पंक्ति 6 ​​को निरीक्षण केwidget=a very useful item" रूप में देखें कि यह प्रदर्शित होती है: और समझें कि लाइन 7 होगी set widget=%widget:"=%और लाइन 8 का अवलोकनwidget=a very useful item किया जाएगा कि प्रदर्शित लाइन अब अनुगामी बोली नहीं है
जेसी चिशोल्म

0

मुझे लगा कि मेरे पास समाधान है, लेकिन मैंने जल्द ही बैच फ़ाइलों के निष्पादन के साथ असामान्य व्यवहार का अनुभव किया। अचानक सीएमडी लंबी पथ मूर्तियों को मान्यता नहीं दे रहा है। पूर्ण पथ से बैच फ़ाइल का सामान्य निष्पादन

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

रिटर्न

'C: \ Documents' को आंतरिक या बाहरी कमांड के रूप में मान्यता प्राप्त नहीं है ...।

आपकी पूरी समस्या है। सीएमडी कमांड लाइन से फ़ाइलनाम के अंदर रिक्त स्थान को नहीं समझता है, इसलिए यह सोचता है कि आप पास होने की कोशिश कर रहे हैं

और सेटिंग्स \ व्यवस्थापक \ मेरे दस्तावेज़ \ टीएक्सटी \ बैचटेस्ट \ डेटाआउट.बीएटी

मापदंडों के रूप में

"C: \ दस्तावेज़"

कार्यक्रम।

आपको पथ में रिक्त स्थान के साथ बैच फ़ाइल चलाने के लिए इसे उद्धृत करने की आवश्यकता है:

> "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' == '' गोटो योरूब

लेकिन अगर किसी फ़ाइल के अस्तित्व की जाँच हो रही है जिसमें उद्धरण हो सकते हैं या नहीं हो सकते हैं:

अगर EXIST "! 1!" गोटो दूसरों

ध्यान दें कि सिंगल कोट्स और डबल कोट्स का उपयोग अलग-अलग है।


0

सभी उत्तर पूर्ण हैं। लेकिन एक बात जोड़ना चाहता था,

FirstName =% ~ 1 सेट करें

अंतिम नाम सेट करें =% ~ 2

इस लाइन को काम करना चाहिए था, आपको एक छोटे से बदलाव की जरूरत थी।

"FirstName =% ~ 1" सेट करें

"LastName =% ~ 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%
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.