Windows ऑपरेटर को "= <" में बदलकर "= 0 <" क्यों करता है?


1

मेरे पास निम्न बैच फ़ाइल है:

SET /P FOO=<"foo.txt"

यह की सामग्री को पढ़ने का एक प्रयास है foo.txt चर में FOO, जैसा कि सुझाव दिया गया है बैच फ़ाइल में चर में फ़ाइल सामग्री कैसे पढ़ें? । इस विधि ने पहले मेरे लिए ठीक काम किया है।

जब मैं स्क्रिप्ट निष्पादित करता हूं, तो मुझे निम्नलिखित आउटपुट मिलते हैं:

SET /P FOO= 0<"foo.txt"

यह केवल प्रदर्शन त्रुटि नहीं है, मान चर में नहीं पढ़ा जाता है। क्यों होता है ऐसा? मैं इसका कैसे समाधान करूं?

मैं कई मशीनों पर देख रहा हूँ, EOL या एन्कोडिंग समस्याएँ स्रोत नहीं लगती हैं।


ओलिवर, foo.txt को कैसे कोडित किया जाता है, यह एक ANSI फ़ाइल या UTF-8 है?
duDE

@duDE मैंने दोनों की कोशिश की है। इससे कोई फर्क नहीं पड़ता
Der Hochstapler

किसी भी तरह, ऑपरेटर बस है <, और यह कार्यात्मक रूप से इसके बराबर है 0<
grawity

विंडोज 7 पर मेरे लिए काम करता है
DavidPostill

जवाबों:


3

क्या आप सुनिश्चित हैं कि यह काम नहीं करता है? मैंने समस्या को दोहराने की कोशिश की, और यहाँ मुझे जो मिलता है:

D:\>notepad test.bat //i've put SET /P FOO=<"foo.txt" inside it
D:\>echo asdf > foo.txt
D:\>test.bat
D:\>SET /P FOO= 0<"foo.txt"
D:\>echo %FOO%
asdf
D:\>

तो यह जोड़ता है 0< लेकिन यह अभी भी फ़ाइल के अंदर से चर के लिए डेटा लागू होता है।


हाँ। मुझे यकीन है कि यह काम नहीं करता है। "काम नहीं कर रहा" भाग वह है जिसने मुझे इस जांच में खींचा।
Der Hochstapler

इसका मतलब यह है कि सबसे अधिक संभावना है कि "काम नहीं कर रहा" भाग पूरी तरह से कहीं और से आता है (जैसे कि एन्कोडिंग foo.txt फ़ाइल)।
grawity

आप सही हैं, कम से कम विंडोज 7 के लिए (मैं इस समय विंडोज 10 पर इस परीक्षण को चलाने में सक्षम नहीं हूं)।
Kamil Maciorowski

@grawity No. मैं किसी भी फ़ाइल के साथ इसे पुन: पेश कर सकता हूं। मूल समस्या यह थी कि कोई चर निर्धारित नहीं है। यदि मैं सीएमडी में सटीक कमांड कॉपी करता हूं, तो चर है सेट। मुझे शक करना बंद करो? पी
Der Hochstapler

ठीक है, कई और अलग-अलग परीक्षणों के बाद, मुझे यह पुष्टि करनी होगी कि यह व्यवहार समस्या का कारण नहीं है। मैं अभी भी इस व्यवहार को नहीं समझ पा रहा हूं, अकेले इस मुद्दे का स्रोत होने दो।
Der Hochstapler

2

प्रारंभिक प्रश्न का उत्तर देने के लिए, @grawity के रूप में बताया , =< के लिए एक संक्षिप्त रूप है = <0, जो पूरी तरह से ठीक वाक्यविन्यास है और वास्तव में उम्मीद के अनुसार काम करता है (एक बार जब आप इसे परीक्षण करते हैं सही ढंग से )।

इसलिए आउटपुट में कुछ भी गलत नहीं है और जब मैं एक अलग मुद्दे की जांच कर रहा था तो यह सिर्फ एक लाल हेरिंग था।

इस तरह से कोड के एक टुकड़े से संबंधित मुद्दा:

@ECHO OFF
SETLOCAL
SET TEST=Fail
ECHO Pass>foo.txt

IF ERRORLEVEL 0 (
SET /P TEST=<foo.txt
ECHO %TEST%
)

इसे चलाते समय, मुझे उम्मीद थी कि आउटपुट होगा Pass, जैसा कि इस से पढ़ा जाना चाहिए था foo.txt, लेकिन आउटपुट है Fail। मुझे संदेह था कि यह "मैंगल्ड" सिंटैक्स के कारण है।

हालांकि, @Joey के रूप में बताया , यह व्यवहार किससे संबंधित है विस्तार में देरी हुई

उपरोक्त कोड को काम करने के लिए, इसे फिर से लिखना चाहिए:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET TEST=Fail
ECHO Pass>foo.txt

IF ERRORLEVEL 0 (
SET /P TEST=<foo.txt
ECHO !TEST!
)

विलंबित विस्तार पर पढ़ें ( help set ) और आप देखेंगे कि आपका कोड काम क्यों नहीं करता है। इसका पुनर्निर्देशन ऑपरेटर के साथ कुछ भी नहीं करना है। एक और जोड़ें echo %TEST% आपके बाद if बयान और आप प्राप्त करेंगे Pass
Joey

@ जोये मुझे संदेह था कि यह विलंबित विस्तार से संबंधित है। हालाँकि, जोड़ना ECHO बाद IF थोरा उस बिंदु को नकारता है जो मैं स्क्रिप्ट के साथ बनाना चाहता था, है ना?
Der Hochstapler

यह आपको दिखाता है कि set /p ठीक से काम कर रहा है; आपकी धारणा गलत है।
Joey

@ जोये धन्यवाद। मैंने अपना उत्तर समायोजित कर लिया है। मुझे आशा है कि मुझे यह अभी मिल गया है: पी
Der Hochstapler
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.