2008-10-15 6 views
80

배치 파일에서 파일 (텍스트 또는 바이너리)을 읽는 방법은 무엇입니까? 바이너리 모드 나 텍스트 모드로 읽는 방법이 있습니까?배치 파일 : 파일을 읽는 방법?

NT 스타일의 cmd.exe를 아래에서
+0

@ RookieTEC9 : 그렇습니다. 2 가지가 완벽하다는 점은 알고 있지만 mstos에서 작동하는 답변이 필요합니다. Windows NT (또는 최신 버전)가 아닌 7 년 전에이 질문에 대해 염두에 두었습니다. –

+0

@ RookieTEC9 : 네가 맞다고 생각한다. ms-dos 태그를 제거합니다. –

+0

MS-DOS 용으로 'TYPE [fileName]'명령을 사용할 수 있습니다. – RookieTEC9

답변

37

당신은 명령에 대해 사용할 수 있습니다 (즉, 어떤 "DOS"사용중인에 작동하는지 모른다). 또한 parse ini files 수 있습니다!

+14

이것은 매우 복잡한 예이며 특별히 설명하지 않은 채 형식이 지정된 텍스트 파일의 특정 정보를 구문 분석합니다. 'for /? '와 같이 명령 *은 myfile.txt의 각 행을 구문 분석하고 세미콜론으로 시작하는 행을 무시하고 쉼표 및/또는 공백으로 구분 된 토큰으로 각 행의 두 번째 및 세 번째 토큰을 본문에 전달합니다 . * –

57

을 수행 할 수 있습니다 자세한 내용은 명령 프롬프트에

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

유형 "에 대한 도움"텍스트 파일의 라인을 통해 루프. 명령 프롬프트에서

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

유형

for /? 

:

+15

'%% i'이어야합니다. –

+25

이 명령은 공백 문자를 발견하면 줄을 읽는 것을 중단합니다. 결국 FOR/F "tokens = *"%% i IN (file.txt)을 사용하여 끝났습니다. @ECHO %% i – Jason

+8

작동합니다! 콘솔을 사용하고 있다면 bat 파일을 사용하는 경우 % i을 시도한 다음 %% i를 시도하십시오. –

31

일반적으로 FOR-LOOP는 작동하지만 몇 가지 문제가 있습니다. FOR는 빈 줄을 허용하지 않으며 ~ 8190이 넘는 줄은 문제가됩니다. 지연된 확장을 사용하지 않으면 확장이 안정적으로 작동합니다.

CR/LF 대 단일 LF의 탐지도 약간 복잡해 보입니다.
또한 FOR-Loop가 즉시 읽기를 취소하므로 NUL 문자가 문제가됩니다.

바이너리 독서는 거의 불가능한 것처럼 보입니다.

빈 줄 문제는 트릭으로 해결할 수 있습니다. 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%%"&"&과 같은 내용으로 실패합니다.

편집이 :/P 변형
set /p로 파일을 읽는의 두 번째 방법이 있습니다 설정 추가 유일한 단점은 라인 당 ~ 1,024 자로 제한이라고하며,이 라인 끝에서 제어 문자를 제거 .
하지만 장점은, 당신은 지연 토글을 필요로하지 않았다 그것을 당신이 SO: converting a binary file to HEX representation using batch file에서
볼 수있는 육각 표현으로 "진"을 읽기위한 변수

@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! 
) 
) 

에 값을 저장하는 것이 더 쉽습니다

+0

'set/p' 사용에 대한 포인터를 보내 주셔서 감사합니다. 나는'set/p value = SteveC

+0

Jeb, 위의 해결책에 기반한 관련 질문을 http://stackoverflow.com/questions/11408295/with-dos -batch-file-how-to-parse-a-file-and-output-part-to-one-file-part-to-an – Nicholas

+0

EOF (파일 끝) 문자 인 ASCII '0x1A'는 어떨까요? ? 'for/F'는 NUL ('0x00') 문자와 같은 방식으로 동작합니까? – aschipfl

-4

방금 ​​cmd를에 표시하려는 경우, 당신은이를 사용할 수 있습니다

cat myfile.txt 
+6

'cat'은 windows 명령이 아닙니다. , 당신은'type'을 사용해야합니다. –

0

잘 알을 프로그래머 다른 방법 하다며하지만 당신은 단지 텍스트를 표시하고 저장하지하려면 어디서나 당신은 단지 사용

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

이됩니다 할 findstr /v "randomtextthatnoonewilluse" filename.txt

0

한 아주 쉬운 방법을 다음과 같은 명령을 사용하다 텍스트 파일의 첫 번째 텍스트 줄만 표시합니다. 다른 방법으로 다음 명령을 사용하면됩니다.

type %pathtotextfile%\textfile.txt 

이렇게하면 텍스트 파일의 모든 데이터가 화면에 표시됩니다. 희망이 도움이!