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
현재는 빈 줄을 계산하지 않습니다. 또한 8KB의 배치 파일 행 길이 제한이 적용됩니다.
;
기본 FOR / F EOL 문자 인 세미콜론으로 시작하는 행을 무시 합니다. 10 줄을 요청하면 비어 있지 않고로 시작하지 않는 처음 10 줄을 인쇄합니다 ;
.
너희들 ...
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="
공백과 함께 전체 폴더 이름을 인쇄 하려면 추가 해야했습니다.
텍스트 파일에서 첫 번째 줄을 읽는 Windows 배치 명령에 대한 대답이있는 thetalkingwalnut 덕분에 다음 솔루션을 생각해 냈습니다.
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
이 시도
@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 번째, 첫 번째 및 마지막 줄은 어떻게 얻습니까? " http://www.netikka.net/tsneti/info/tscmd023.htm
[2012 년 8 월 28 일 추가됨] 다음 항목도 가질 수 있습니다.
@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")