2008-10-15 14 views
80

बैच फ़ाइल से आप फ़ाइल (टेक्स्ट या बाइनरी) कैसे पढ़ सकते हैं? बाइनरी मोड या टेक्स्ट मोड में इसे पढ़ने का कोई तरीका है?बैच फ़ाइलें: फ़ाइल को कैसे पढ़ा जाए?

+0

@ रूकीटेक 9: हाँ, मुझे पता है कि वे 2 पूरी तरह से अलग चीजें हैं, लेकिन मुझे एक उत्तर की आवश्यकता है जो एमएसडीओएस में काम करता है, न कि विंडोज एनटी (या नए संस्करण), यह सवाल 7 साल पहले भी पूछा गया था, इसे ध्यान में रखें –

+0

@ रूकीटेक 9: मुझे लगता है कि आप सही हैं, यह थोड़ी देर के बाद से रहा है। मैं बस एमएस-डॉस टैग –

+0

हटा दूंगा आप एमएस-डॉस के लिए 'टाइप [fileName]' आदेश का उपयोग कर सकते हैं। – RookieTEC9

उत्तर

37

आप कमांड के लिए उपयोग कर सकते हैं: कमांड प्रॉम्प्ट पर

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k 

प्रकार

for /? 

। इसके अलावा, आप parse ini files कर सकते हैं!

+14

यह एक सुंदर जटिल उदाहरण है, बिना किसी स्पष्टीकरण के, विशेष रूप से स्वरूपित टेक्स्ट फ़ाइल से बहुत विशिष्ट जानकारी को पार्स करना। 'For /?' के अनुसार कमांड * myfile.txt में प्रत्येक पंक्ति को पार्स करेगा, अर्धविराम से शुरू होने वाली रेखाओं को अनदेखा कर देगा, प्रत्येक पंक्ति से दूसरे और तीसरे टोकन को शरीर के लिए पास कर देगा, कॉमा और/या रिक्त स्थान से सीमित टोकन के साथ * –

57

NT-शैली cmd.exe के अंतर्गत, आप

FOR /F %i IN (file.txt) DO @echo %i 

प्रकार अधिक जानकारी के लिए कमांड प्रॉम्प्ट पर "के लिए सहायता" के साथ एक पाठ फ़ाइल की तर्ज के माध्यम से लूप कर सकते हैं। (पता नहीं है कि अगर में जो कुछ भी "DOS" आप उपयोग कर रहे काम करता है)

+15

यह '%% i' होना चाहिए। –

+25

यदि यह एक सफेद जगह चरित्र पाया जाता है तो यह आदेश एक रेखा पढ़ने से बाहर निकल जाएगा। मैं अंततः फॉर/एफ "टोकन = *" %% i IN (file.txt) DO @ECHO %% i – Jason

+8

का उपयोग कर समाप्त हुआ यह काम करता है! और यदि आप कंसोल का उपयोग कर रहे हैं तो% i कोशिश करें यदि आप बैट फ़ाइल का उपयोग कर रहे हैं तो %% i का प्रयास करें। –

31

फोर-लूप आम तौर पर काम करता है, लेकिन कुछ मुद्दे हैं। फोर खाली लाइनों और लाइनों को स्वीकार नहीं करता है ~ 8190 से अधिक समस्याग्रस्त हैं। विस्तार विलंबित विस्तार अक्षम होने पर विस्तार केवल विश्वसनीय काम करता है।

एकल एलएफ बनाम सीआर/एलएफ का पता लगाना थोड़ा जटिल लगता है।
इसके अलावा एनयूएल वर्ण समस्याग्रस्त हैं, क्योंकि फोर-लूप तुरंत पढ़ने को रद्द कर देता है।

डायरेक्ट बाइनरी रीडिंग इसलिए लगभग असंभव प्रतीत होता है।

खाली लाइनों के साथ समस्या को एक चाल के साथ हल किया जा सकता है। Findstr कमांड का उपयोग करके, लाइन पंक्ति के साथ प्रत्येक पंक्ति को उपसर्ग करें, और पढ़ने के बाद, उपसर्ग को हटा दें।

@echo off 
SETLOCAL DisableDelayedExpansion 
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
    set "var=%%a" 
    SETLOCAL EnableDelayedExpansion 
    set "var=!var:*:=!" 
    echo(!var! 
    ENDLOCAL 
) 

सक्षम और विकलांग देरी विस्तार के बीच टॉगल करने से आवश्यक सुरक्षित तार, ! या ^^^xy!z तरह के साथ काम करने के लिए है।
ऐसा इसलिए है क्योंकि set "var=%%a" लाइन DisabledDelayedExpansion के साथ सुरक्षित है, अन्यथा विस्मयादिबोधक चिह्न हटा दिए जाते हैं और कैरेट का उपयोग (माध्यमिक) से बचने वाले वर्णों के रूप में किया जाता है और उन्हें भी हटा दिया जाता है।
लेकिन परिवर्तनीय var का उपयोग केवल EnabledDelayedExpansion के साथ सुरक्षित है, क्योंकि call %%var%%"&"& जैसी सामग्री के साथ विफल हो जाएगा।

संपादित करें: सेट जोड़ा गया/पी संस्करण
set /p के साथ एक फ़ाइल को पढ़ने का एक दूसरा तरीका नहीं है, केवल नुकसान कर रहे हैं कि यह प्रति पंक्ति ~ 1024 वर्णों तक सीमित है और यह लाइन अंत में नियंत्रण वर्ण निकालता है ।
लेकिन लाभ है, तो आप देरी टॉगल जरूरत नहीं थी और इसे चर

@echo off 
setlocal EnableDelayedExpansion 
set "file=%~1" 

for /f "delims=" %%n in ('find /c /v "" %file%') do set "len=%%n" 
set "len=!len:*: =!" 

<%file% (
    for /l %%l in (1 1 !len!) do (
    set "line=" 
    set /p "line=" 
    echo(!line! 
) 
) 

में दुकान मूल्यों के लिए आसान है
आप SO: converting a binary file to HEX representation using batch file पर दिखाई दे सकता है यह "बाइनरी" पढ़ने एक हेक्स-प्रतिनिधित्व में के लिए

+0

'सेट/पी' के उपयोग पर सूचक के लिए धन्यवाद। मैंने 'set/p value = SteveC

+0

जेब से पहली पंक्ति प्राप्त की, मैंने http://stackoverflow.com/questions/11408295/with-dos में उपरोक्त आपके समाधान के आधार पर एक संबंधित प्रश्न पूछा -बैच-फ़ाइल-कैसे-टू-पार्स-ए-फाइल-एंड-आउटपुट-पार्ट-टू-वन-फाइल-पार्ट-टू-ए – Nicholas

+0

ईओएफ (एंड-ऑफ-फाइल) कैरेक्टर, ASCII '0x1A' के बारे में क्या है ? क्या '/ f' समान रूप से एनयूएल (' 0x00') वर्णों के साथ व्यवहार करता है? – aschipfl

-4

तुम सिर्फ cmd पर प्रदर्शित करना चाहते हैं, तो आप इस का उपयोग कर सकते हैं:

cat myfile.txt 
+6

'cat' विंडोज कमांड नहीं है , आपको इसके लिए 'टाइप' का उपयोग करना चाहिए। –

0

खैर theres अल विभिन्न तरीकों की OT लेकिन यदि आप केवल पाठ प्रदर्शित करने और यह दुकान नहीं चाहते कहीं तो आप का उपयोग करें:

set /p mytextfile=< %pathtotextfile%\textfile.txt 
echo %mytextfile% 

हो जाएगा ताकि: क्या करना findstr /v "randomtextthatnoonewilluse" filename.txt

0

एक बहुत ही आसान तरीका यह निम्न आदेश का उपयोग है केवल टेक्स्ट फ़ाइल में टेक्स्ट की पहली पंक्ति प्रदर्शित करें। दूसरी तरफ आप इसे निम्न आदेश का उपयोग कर सकते हैं:

type %pathtotextfile%\textfile.txt 

यह स्क्रीन पर टेक्स्ट फ़ाइल में सभी डेटा डाल देगा। उम्मीद है की यह मदद करेगा!

संबंधित मुद्दे