텍스트 파일에서 첫 줄을 읽는 Windows 배치 명령
-
02-07-2019 - |
문제
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
현재 빈 줄을 계산하지 않습니다. 또한 8kb의 배치 파일 라인 길이 제한이 적용됩니다.
다른 팁
음? 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:\>
당신은 이것을 시도 할 수 있습니다 :
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
편집하다또는 4 개의 데이터 열이 있고 5 번째 행에서 하단까지 원한다고 말하십시오.
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
Thanks to thetalkingwalnut with answer Windows batch command(s) to read first line from text file I came up with the following solution:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Slightly building upon the answers of other people. Now allowing you to specify the file you want to read from and the variable you want the result put into:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
This means you can use the above like this (assuming you called it getline.bat)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
One liner, useful for stdout redirect with ">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
Try this
@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
The problem with the EXIT /B
solutions, when more realistically inside a batch file as just one part of it is the following. There is no subsequent processing within the said batch file after the EXIT /B
. Usually there is much more to batches than just the one, limited task.
To counter that problem:
@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
(However, the so-called poison characters will still be a problem.)
More on the subject of getting a particular line with batch commands:
How do I get the n'th, the first and the last line of a text file?" http://www.netikka.net/tsneti/info/tscmd023.htm
[Added 28-Aug-2012] One can also have:
@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
Here is a workaround using powershell
:
powershell (Get-Content file.txt)[0]
(You can easily read also a range of lines with powershell (Get-Content file.txt)[0..3]
)
If you need to set a variable inside a batch script as the first line of file.txt
you may use:
for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")
Note, the batch file approaches will be limited to the line limit for the DOS command processor - see What is the command line length limit?.
So if trying to process a file that has any lines more that 8192 characters the script will just skip them as the value can't be held.
Another way
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
To cicle a file (file1.txt
, file1[1].txt
, file1[2].txt
, etc.):
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%
And it's running.