배치 파일에서 파일 (텍스트 또는 바이너리)을 어떻게 읽을 수 있습니까? 바이너리 모드 또는 텍스트 모드로 읽는 방법이 있습니까?
답변
for 명령을 사용할 수 있습니다.
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
유형
for /?
명령 프롬프트에서. 또한 ini 파일을 구문 분석 할 수 있습니다 !
답변
NT 스타일 cmd.exe에서 다음을 사용하여 텍스트 파일 줄을 반복 할 수 있습니다.
FOR /F %i IN (file.txt) DO @echo %i
자세한 내용을 보려면 명령 프롬프트에 “help for”를 입력하십시오. (사용중인 “DOS”에서 작동하는지 알 수 없음)
답변
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 mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
이렇게하면 텍스트 파일의 첫 번째 텍스트 줄만 표시됩니다. 다른 방법은 다음 명령을 사용하는 것입니다.
type %pathtotextfile%\textfile.txt
그러면 텍스트 파일의 모든 데이터가 화면에 표시됩니다. 도움이 되었기를 바랍니다!
답변
많은 다른 방법이 있지만 텍스트를 표시하고 어디에도 저장하지 않으려면 다음을 사용하십시오. 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
답변
화면에 myfile.txt 파일의 내용을 표시하는 코드
% filecontent % = 0
유형 % filename % >> % filecontent %
echo % filecontent % 설정