배치 파일에서 파일 (텍스트 또는 바이너리)을 어떻게 읽을 수 있습니까? 바이너리 모드 또는 텍스트 모드로 읽는 방법이 있습니까?
TYPE [fileName]
MS-Dos에 대한 명령 을 사용할 수 있습니다 .
배치 파일에서 파일 (텍스트 또는 바이너리)을 어떻게 읽을 수 있습니까? 바이너리 모드 또는 텍스트 모드로 읽는 방법이 있습니까?
TYPE [fileName]
MS-Dos에 대한 명령 을 사용할 수 있습니다 .
답변:
for 명령을 사용할 수 있습니다.
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
유형
for /?
명령 프롬프트에서. 또한 ini 파일을 구문 분석 할 수 있습니다 !
for /?
명령에 따라 myfile.txt의 각 줄을 구문 분석하고 세미콜론으로 시작하는 줄을 무시하고 각 줄에서 두 번째 및 세 번째 토큰을 쉼표 및 / 또는 공백으로 구분 된 토큰과 함께 for 본문으로 전달합니다.
NT 스타일 cmd.exe에서 다음을 사용하여 텍스트 파일 줄을 반복 할 수 있습니다.
FOR /F %i IN (file.txt) DO @echo %i
자세한 내용을 보려면 명령 프롬프트에 "help for"를 입력하십시오. (사용중인 "DOS"에서 작동하는지 알 수 없음)
%%i
.
FOR-LOOP은 일반적으로 작동하지만 몇 가지 문제가 있습니다. FOR는 빈 줄을 허용하지 않으며 ~ 8190 이상의 줄은 문제가 있습니다. 확장은 지연된 확장이 비활성화 된 경우에만 안정적으로 작동합니다.
CR / LF 대 단일 LF의 감지도 약간 복잡해 보입니다.
또한 NUL 문자는 FOR-Loop이 즉시 읽기를 취소하므로 문제가 있습니다.
따라서 직접적인 이진 읽기는 거의 불가능 해 보입니다.
빈 줄의 문제는 트릭으로 해결할 수 있습니다. 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 변형 추가를 사용
하여 파일을 읽는 두 번째 방법이 있습니다 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!
)
)
"바이너리"를 16 진수 표현으로 읽으려면 SO : 배치 파일을 사용하여 바이너리 파일을 HEX 표현으로 변환하는
것을 볼 수 있습니다.
set /p
. 내가 사용하는 set /p value=< result.txt
텍스트 파일의 첫 번째 라인을 얻을
0x1A
어떻습니까? 않습니다 for /F
NUL (와 같은 방식으로 행동 0x00
) 문자를?
:
하거나 ;
또는 포함!
많은 다른 방법이 있지만 텍스트를 표시하고 어디에도 저장하지 않으려면 다음을 사용하십시오. findstr /v "randomtextthatnoonewilluse" filename.txt
수정 된 코드 :
setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
set line=%%a
set "line=!line:*:=!"
echo(!line!
)
endlocal
pause
eol=
및 delims=
불필요한 있습니다 set line=%%a
따옴표를 사용하고 지연 확장 모드를 전환하지 않고해야이 코드는 느낌표를 읽을 수 없습니다