텍스트 파일의 내용을 배치 파일 변수에로드하려면 어떻게해야합니까?
-
02-07-2019 - |
문제
텍스트 파일의 전체 내용을로드하여 추가 처리를 위해 변수로로드 할 수 있어야합니다.
어떻게 할 수 있습니까?
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