텍스트 파일의 내용을 배치 파일 변수에로드하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/134001

문제

텍스트 파일의 전체 내용을로드하여 추가 처리를 위해 변수로로드 할 수 있어야합니다.

어떻게 할 수 있습니까?


Roman Odaisky의 답변 덕분에 내가 한 일은 다음과 같습니다.

SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i

echo %content%
EndLocal
도움이 되었습니까?

해결책

사용 for, 라인을 따라 무언가 :

set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i

어쩌면 당신은해야 할 것입니다 setlocal enabledelayedexpansion 및/또는 사용 !content! 보다는 %content%. 근처에 MS 창문이 없으므로 테스트 할 수 없습니다 (그리고 동일하게 :-).

내가 아는 최고의 배치 파일-블랙 마법 참조는 http://www.rsdn.ru/article/winshell/batanyca.xml. 러시아어를 모른다면 여전히 제공된 코드 스 니펫을 사용할 수 있습니다.

다른 팁

SET 명령이 /P 스위치를 지원하는 경우 그런 식으로 입력을 파이프로 파이프 할 수 있습니다.

set /p VAR1=<test.txt

세트 /? | "/p"찾기

/p 스위치를 사용하면 변수 값을 사용자가 입력 한 입력 한 줄로 설정할 수 있습니다. 입력 라인을 읽기 전에 지정된 프롬프트 스트링을 표시합니다. 프롬프트 스트링은 비어있을 수 있습니다.

이는 등록되지 않은 파일 유형 (허용 된 답변이없는)에서 작동하는 이점이 추가됩니다.

당신이 사용할 수있는:

set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i

추가 처리를 정의 할 수 있습니까?

For Loop을 사용하여 거의이 작업을 수행 할 수 있지만 CR/LF를 환경 변수에 삽입하는 쉬운 방법은 없으므로 한 줄에 모든 것을 갖습니다. (당신은 당신이해야 할 일에 따라 이것을 해결할 수 있습니다.)

또한 이런 식으로 약 8K 텍스트 파일 미만으로 제한됩니다. (약 8k보다 큰 단일 env var를 만들 수 없습니다.)

Loop에 대한 Bill의 제안은 아마도 필요한 것일 것입니다. 한 줄 씩 파일을 처리합니다.

(사용 %i 명령 줄에서 %%i 배치 파일로)

for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i

더 진보 된 :

for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
goto :fin

:part2
echo %1
::do further processing here
goto :eof

:fin

다음 줄이 포함 된 "setfile.bat"라는 파일을 만듭니다. 캐리지 리턴이 없습니다 끝에 ...

set FileContents=

그런 다음 배치 파일에서 다음과 같은 일을합니다 ...

   @echo off
   copy SetFile.bat + %1 $tmp$.bat > nul
   call $tmp$.bat
   del $tmp$.bat

%1은 입력 파일의 이름이며 %FileContents %는 호출 후 입력 파일의 내용을 포함합니다. 이것은 한 줄 파일에서만 작동합니다 (예 : 캐리지 리턴이없는 파일). 필요한 경우 %TMP %.BAT를 호출하기 전에 파일에서 캐리지 리턴을 제거/교체 할 수 있습니다.

for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top