क्या एक उद्धृत चर से कैरेट (^) से बचना संभव है?


0

मेरे पास एक बैच फ़ाइल है जो मैंने सेट की है जो एक कमांड में पारित SQL कमांड का उपयोग कर रहा है। जब मैं इस चर को कॉल करता हूं, तो लाइन दिखाई नहीं देती है। मुझे "SQL कमांड मान्यता प्राप्त नहीं है" त्रुटि मिलती है।

अपनी फ़ाइल में मैं कुछ इस तरह से करता हूँ:

ECHO OFF
set vSQL=%~2

echo %vSQL%

मैं जिस SQL ​​वैरिएबल को फ़ाइल में भेज रहा हूं, उसमें ऑपरेशन से कम शामिल है select * from sometable where c3 < 999999999:।

मैंने इसे इसमें जोड़ने की कोशिश की ^: ...c3 ^< 999999999लेकिन फिर भी यह काम नहीं किया। मुझे समान त्रुटि मिली। क्या <बैच फ़ाइल में उपयोग करने का एक और तरीका है ?

और हाँ, मुझे यकीन है कि यह फ़ाइल का वह हिस्सा है जिससे समस्या पैदा हो रही है। मैंने sqldeveloper में पूरे SQL ऑपरेशन को चलाया जहाँ यह ठीक है।


बहुत यकीन है कि "ऑपरेटर से कम" मेरे दोस्त ^। ^ इस पृष्ठ के अनुसार , उद्धरणों के बीच एक '<' अक्षर या तो काम करना चाहिए, या एक कैरेट के साथ भाग गया जैसा आपने किया है ... क्या आप सकारात्मक हैं कि यह '<' समस्याओं का कारण है? क्या आपने यह सत्यापित करने के लिए कहीं और SQL चलाया कि यह सही है? मैं आपके मुद्दे की तरह शॉटगनिंग कर रहा हूँ, लेकिन क्या आपने दोहरे कैरेट से बचने का क्रम आज़माया है?
bosco

जवाबों:


0

बैच पार्सर निम्नलिखित परिसीमन मापदंडों का उपयोग करता है: <space> <tab> ; , = <0xFF>यह अंतिम चरित्र एक गैर-ब्रेकिंग स्पेस है।

कमांड लाइन पर पैरामीटर सीमांकक से बचना असंभव है। एक पैरामीटर मान में एक सीमांकक शामिल करने का एकमात्र तरीका पूरे पैरामीटर को दोहरे उद्धरणों में संलग्न करना है।

तो आप अपनी स्क्रिप्ट का उपयोग करके कॉल कर सकते हैं yourScript.bat "select * from sometable where c3 < 999999999":। चूंकि <अब उद्धृत किया गया है, इसलिए आपको इसे बचने के बारे में चिंता करने की आवश्यकता नहीं है।

उद्धरण को मूल्य का हिस्सा माना जाता है। आपके द्वारा ~संशोधक का उपयोग %~2पैरामीटर मान से संलग्न उद्धरणों को छीन लेगा। लेकिन अब आपको या तो आवश्यकता के बारे में चिंता करनी होगी या फिर भागने से बचना होगा <। सबसे आसान काम यह है कि पूरे असाइनमेंट एक्सप्रेशन के आसपास उद्धरण जोड़ें set "vSQL=%~2":। जब इस तरह से किया जाता है, तो उद्धरण सुरक्षा करते हैं <, लेकिन वे मूल्य में शामिल नहीं होते हैं।

जब चर का उपयोग करने का समय आता है, तो आपको फिर से <चरित्र के बारे में चिंता करनी होगी । इस मामले में, विलंबित विस्तार को सक्षम और उपयोग करना सबसे सरल है।

setlocal enableDelayedExpansion
echo !vSQL!

0x255 That last character is a non-breaking space. मैं तुम्हें मतलब मान 0xffके बाद से 0x255वास्तव में है ɕ(कर्ल के साथ लैटिन छोटे सी)। फिर भी, यह वास्तव में एक गैर-ब्रेकिंग स्पेस नहीं है। असली NBSP यूनिकोड कोड-पॉइंट 0xa0 पर है। 0xff पर चरित्र कोड-पेज निर्भर है, और हो सकता है ے, ˙, я, आदि, लेकिन अक्सर है ÿ। इसे कभी-कभी "नॉन-ब्रेक स्पेस" कहा जाता है क्योंकि पुराने डॉस दिनों में, कई (लेकिन सभी नहीं) कार्यक्रमों ने इसे एक स्थान के रूप में प्रदर्शित किया लेकिन इसे (कुछ मायनों में) एक सामान्य चरित्र की तरह व्यवहार किया, लेकिन तब भी यह कोड-पेज था निर्भर।
Synetech 22'13

@Synetech - दोह! हां, मेरा मतलब 0xFF (निश्चित), और हां, वास्तविक अर्थ कोड-पेज पर निर्भर है। लेकिन मुझे पूरा यकीन है कि चरित्र को सीमांकित के रूप में चुना गया था क्योंकि यह सीएमडी भाषा के मूल डेवलपर्स द्वारा उपयोग किए गए कोड-पृष्ठ में एक गैर-ब्रेकिंग स्पेस है। लेकिन, हां, आप सभी मामलों में सही हैं।
डेबनहम

मैंने इसे विंडोज़ कमांड-प्रॉम्प्ट में आज़माया और पर्याप्त रूप से सुनिश्चित किया, कमांड दुभाषिया वास्तव में इसे एक तर्क-वितर्क के रूप में उपयोग करता है (मुझे नहीं पता कि क्या डॉस करता है? मुझे शनिवार को कोशिश करनी होगी)। यह दिलचस्प है क्योंकि मेरे पास बहुत सारी पुरानी डॉस बैच-फाइलें हैं, जो (ab) 0xff का उपयोग विभिन्न प्रयोजनों (जैसे तालिकाओं को स्वरूपित करने) के लिए करती थीं और बाद में जब मैंने उन्हें विंडोज में उपयोग किया, तो वे इस प्रकार प्रदर्शित होंगी ÿ। अगर मैं कभी विंडोज में इसे तोड़ दूंगा तो मैंने इसे तर्कों में इस्तेमाल किया। इसके अलावा, मुझे आश्चर्य है कि यदि आप कोड-पृष्ठ का उपयोग कर रहे हैं तो सीएमडी इसे कैसे व्यवहार करता है जिसमें यह स्थान नहीं है (मैं chcpथोड़ी देर के लिए खेलने के लिए बंद हूं ...)
Synetech

@Synetech - मुझे यकीन है कि सीएमडी की 0xFF की एक पैरामीटर सीमांकक के रूप में व्याख्या कोड पृष्ठ से स्वतंत्र है। मेरा मानना ​​है कि मैंने कुछ समय पहले कुछ परीक्षण किए थे, लेकिन मेरी याददाश्त सही नहीं है।
debham

उचित लगता है। मैंने कुछ कोशिश की और एक ऐसा नहीं मिला जो एक अंतरिक्ष के अलावा कुछ और प्रदर्शित करता हो। आप शायद सीएमडी और इस पृष्ठ के बारे में सही हैं जो मैंने कुछ साल पहले पढ़ा था, लगता है कि इसे वापस करना है। मैं क्या होता है देखने के लिए सप्ताहांत पर डॉस को एक चक्कर दूंगा, लेकिन ऐसा लगता है कि यह सभी डॉस कोड-पेजों में तथाकथित "अदृश्य चरित्र" हो सकता है ( charmapइसे कॉल करता है no-break space)।
सिनेटेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.