Cmd फ़ाइल में% और %% के बीच क्या अंतर है?


88

मैंने हाल ही में .cmd फ़ाइल में इसके समान एक पंक्ति शामिल की है:

for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"

मूल रूप से मैंने केवल% f का उपयोग किया था, और यह कमांड लाइन पर चलने पर ठीक काम करेगा, लेकिन फाइल के माध्यम से चलने पर नहीं। जब मैंने %% f पर स्विच किया, तो इसने फ़ाइल में काम किया। बस सोच रहा था कि अंतर क्या है।

जवाबों:


138

(अधिक विवरण में स्पष्टीकरण एक संग्रहीत Microsoft KB आलेख में पाया जा सकता है ।)

जानने के लिए तीन बातें:

  1. प्रतिशत चिह्न आदेश पंक्ति पैरामीटर का प्रतिनिधित्व करने के बैच फ़ाइलों में प्रयोग किया जाता है: %1, %2, ...
  2. उनके बीच किसी भी वर्ण के साथ दो प्रतिशत संकेत एक चर के रूप में व्याख्या किए गए हैं:

    echo %myvar%

  3. बीच में (एक बैच फ़ाइल में) बिना किसी चीज के दो प्रतिशत संकेतों को एक कमांड में एक एकल चिह्न की तरह माना जाता है (बैच फ़ाइल में नहीं):%%f

यही कारण है कि?

उदाहरण के लिए, यदि हम आपकी (सरलीकृत) कमांड लाइन को निष्पादित करते हैं

FOR /f %f in ('dir /b .') DO somecommand %f

एक बैच फ़ाइल में, नियम 2 व्याख्या करने की कोशिश करेगा

%f in ('dir /b .') DO somecommand %

एक चर के रूप में। इसे रोकने के लिए, आपको नियम 3 लागू करना होगा और %दूसरे के साथ बचना होगा %:

FOR /f %%f in ('dir /b .') DO somecommand %%f

21
क्या इसके लिए कोई स्पष्टीकरण है कि मैं फ़ॉर लूप में केवल एक प्रतिशत चिह्न का उपयोग करके क्यों दूर हो सकता हूं, जब एक कमांड प्रॉम्प्ट से सीधे निष्पादित किया जाता है, और बैच फ़ाइल से नहीं? मुझे डॉस विरासत के बारे में पता है, लेकिन हम अब एक कमांड लाइन से चर का उपयोग कर सकते हैं।
एलेक मेव

6
इसके अलावा, सुनिश्चित करें कि चर एकल वर्ण है।
जिग्गंजर

1
क्या होगा अगर मैं कमांड जारी करना चाहता हूं जिसमें% है जैसे:: / f %% i के लिए ('git log -1 --pretty = format: "%% H"') GIT_COMMIT = %% i
Tanka सेट करें

15

डॉस में आप कमांड लाइन पर पर्यावरण चर का उपयोग नहीं कर सकते, केवल बैच फ़ाइलों में, जहां उन्होंने %साइन को एक सीमांकक के रूप में उपयोग किया । यदि आप %एक बैच फ़ाइल में शाब्दिक संकेत चाहते हैं , उदाहरण के लिए एक echoबयान में, आपको इसे दोगुना करने की आवश्यकता है।

यह विंडोज़ एनटी पर चला गया जिसने कमांड लाइन पर पर्यावरण चर की अनुमति दी, हालांकि बैकवर्ड संगतता के लिए आपको अभी भी %एक .cmd फ़ाइल में अपने संकेतों को दोगुना करने की आवश्यकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.