मैं Windows बैच फ़ाइल का उपयोग करके पाठ फ़ाइल से पहली पंक्ति कैसे पढ़ सकता हूं? चूंकि फ़ाइल बड़ी है, मैं केवल पहली पंक्ति से निपटना चाहता हूं।
मैं Windows बैच फ़ाइल का उपयोग करके पाठ फ़ाइल से पहली पंक्ति कैसे पढ़ सकता हूं? चूंकि फ़ाइल बड़ी है, मैं केवल पहली पंक्ति से निपटना चाहता हूं।
जवाबों:
यहाँ एक सामान्य-प्रयोजन बैच फ़ाइल है , जो कि केवल एक लाइन के बजाय n
GNU head
उपयोगिता जैसी फ़ाइल से शीर्ष रेखाएँ मुद्रित करती है ।
@echo off
if [%1] == [] goto usage
if [%2] == [] goto usage
call :print_head %1 %2
goto :eof
REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0
for /f ^"usebackq^ eol^=^
^ delims^=^" %%a in (%2) do (
if "!counter!"=="%1" goto :eof
echo %%a
set /a counter+=1
)
goto :eof
:usage
echo Usage: head.bat COUNT FILENAME
उदाहरण के लिए:
Z:\>head 1 "test file.c"
; this is line 1
Z:\>head 3 "test file.c"
; this is line 1
this is line 2
line 3 right here
यह वर्तमान में रिक्त लाइनों की गणना नहीं करता है। यह 8 KB के बैच-फ़ाइल लाइन-लेंथ प्रतिबंध के अधीन भी है।
;
, डिफ़ॉल्ट फॉर / एफ ईओएल चरित्र। यदि 10 लाइनों के लिए पूछ रहे हैं, तो यह पहले 10 लाइनों को प्रिंट करेगा जो खाली नहीं हैं और इसके साथ शुरू नहीं होते हैं ;
।
उह? imo यह बहुत सरल है
set /p texte=< file.txt
echo %texte%
उह तुम लोग ...
C:\>findstr /n . c:\boot.ini | findstr ^1:
1:[boot loader]
C:\>findstr /n . c:\boot.ini | findstr ^3:
3:default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
C:\>
findstr "^1:"
डबल कोट्स की गर्मी और सुरक्षा को बदलना और हासिल करना। या, यदि आप मेरे जैसे उद्धरणों का तिरस्कार करते हैं और खतरनाक रूप से जीना चाहते हैं, तो उपयोग करेंfindstr /b 1:
findstr ^^1
।
set /p
समाधान कहीं अधिक बड़ी फ़ाइलों के लिए कुशल है।
आप इसे आजमा सकते हैं:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
संपादित करें या, कहें कि आपके पास डेटा के चार कॉलम हैं और 5 वीं पंक्ति से नीचे तक चाहते हैं, यह प्रयास करें:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
"delims="
रिक्त स्थान के साथ पूर्ण फ़ोल्डर नामों को प्रिंट करने के लिए जोड़ना था ।
उत्तर विंडोज़ बैच कमांड (एस) के साथ टटलिंगवालनटुम के लिए धन्यवाद , पाठ फ़ाइल से पहली पंक्ति पढ़ने के लिए मैं निम्नलिखित समाधान के साथ आया:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
अन्य लोगों के जवाब पर थोड़ा निर्माण। अब आपको उस फ़ाइल को निर्दिष्ट करने की अनुमति देता है जिसे आप पढ़ना चाहते हैं और चर जिसे आप परिणाम में लाना चाहते हैं:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
इसका मतलब है कि आप इस तरह से ऊपर का उपयोग कर सकते हैं (आप इसे getline.bat कहा जाता है)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
इसे इस्तेमाल करे
@echo off
setlocal enableextensions enabledelayedexpansion
set firstLine=1
for /f "delims=" %%i in (yourfilename.txt) do (
if !firstLine!==1 echo %%i
set firstLine=0
)
endlocal
EXIT /B
समाधान के साथ समस्या है , जब एक बैच फ़ाइल के अंदर और अधिक वास्तविक रूप में इसका सिर्फ एक हिस्सा निम्नलिखित है। के बाद उक्त बैच फ़ाइल में कोई बाद की प्रक्रिया नहीं है EXIT /B
। आमतौर पर केवल एक, सीमित कार्य की तुलना में बैचों के लिए बहुत कुछ है।
उस समस्या का सामना करने के लिए:
@echo off & setlocal enableextensions enabledelayedexpansion
set myfile_=C:\_D\TEST\My test file.txt
set FirstLine=
for /f "delims=" %%i in ('type "%myfile_%"') do (
if not defined FirstLine set FirstLine=%%i)
echo FirstLine=%FirstLine%
endlocal & goto :EOF
(हालांकि, तथाकथित ज़हर पात्रों अभी भी एक समस्या होगी।)
बैच कमांड के साथ एक विशेष लाइन प्राप्त करने के विषय पर अधिक:
मुझे n'th, टेक्स्ट फ़ाइल की पहली और अंतिम पंक्ति कैसे मिलेगी? " Http://www.netikka.net/tsneti/info/tscmd023.htm
[जोड़ा गया 28-अगस्त -2018] एक भी हो सकता है:
@echo off & setlocal enableextensions
set myfile_=C:\_D\TEST\My test file.txt
for /f "tokens=* delims=" %%a in (
'type "%myfile_%"') do (
set FirstLine=%%a& goto _ExitForLoop)
:_ExitForLoop
echo FirstLine=%FirstLine%
endlocal & goto :EOF
एक फ़ाइल Cicle करने के लिए ( file1.txt
, file1[1].txt
, file1[2].txt
, आदि):
START/WAIT C:\LAERCIO\DELPHI\CICLADOR\dprCiclador.exe C:\LAERCIUM\Ciclavel.txt
rem set/p ciclo=< C:\LAERCIUM\Ciclavel.txt:
set/p ciclo=< C:\LAERCIUM\Ciclavel.txt
rem echo %ciclo%:
echo %ciclo%
और चल रहा है।
set /p
एक संकेत के माध्यम से पूछता है; हालांकि फ़ाइल पुनर्निर्देशन के साथ <
इसे तुरंत प्रॉम्प्ट पर फ़ाइल की सामग्री मिलती है; और जैसे ही पहली लाइन समाप्त होती है, उस बिंदु पर प्रॉम्प्ट पढ़ना बंद कर देता है, और इस तरह वेरिएबल में सिर्फ पहली लाइन को स्टोर करता है।
ध्यान दें, बैच फ़ाइल दृष्टिकोण DOS कमांड प्रोसेसर के लिए लाइन सीमा तक सीमित होगा - देखें कमांड लाइन की लंबाई सीमा क्या है? ।
इसलिए यदि ऐसी फाइल को संसाधित करने की कोशिश की जा रही है जिसमें 8192 अक्षर अधिक हों, तो स्क्रिप्ट सिर्फ उन्हें छोड़ देगी क्योंकि मूल्य आयोजित नहीं किया जा सकता है।
दूसरा रास्ता
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
यहां एक वर्कअराउंड का उपयोग किया गया है powershell
:
powershell (Get-Content file.txt)[0]
(आप आसानी से लाइनों की एक श्रृंखला भी पढ़ सकते हैं powershell (Get-Content file.txt)[0..3]
)
यदि आपको बैच स्क्रिप्ट के अंदर एक चर सेट करने की आवश्यकता है क्योंकि file.txt
आप पहली पंक्ति का उपयोग कर सकते हैं:
for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")
for /f "delims=" %a in (downing.txt) do echo %a & pause>nul
पहली पंक्ति प्रिंट करता है, फिर अगली पंक्ति को प्रिंट करने के लिए एक कुंजी दबाने के लिए उपयोगकर्ता की प्रतीक्षा करता है। आवश्यक लाइनें प्रिंट करने के बाद, बंद करने के लिए Ctrl + C दबाएं।
@ रो प्रेसर: यह विधि केवल लाइनों को प्रिंट करती है, न कि लाइन नंबरों को प्रीपेंड करती है।