Подтвердить что ты не робот

Как загрузить содержимое текстового файла в переменную пакетного файла?

Мне нужно иметь возможность загружать все содержимое текстового файла и загружать его в переменную для дальнейшей обработки.

Как я могу это сделать?


Вот что я сделал благодаря ответу Романа Одайского.

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

echo %content%
EndLocal
4b9b3361

Ответ 1

Используйте for, что-то вроде строк:

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

Возможно, вам придется делать setlocal enabledelayedexpansion и/или использовать !content!, а не %content%. Я не могу проверить, так как у меня нет MS Windows рядом (и я желаю вам того же: -).

Лучший пакетный файл-черная магическая ссылка, о которой я знаю, находится в http://www.rsdn.ru/article/winshell/batanyca.xml. Если вы не знаете русский язык, вы все равно можете использовать предоставленные фрагменты кода.

Ответ 2

Если ваша команда set поддерживает/p-переключатель, вы можете направить вход таким образом.

set /p VAR1=<test.txt

set/? | найти "/P"

Переключатель/P позволяет вам установить значение переменной в строку введенный пользователем. Показывает указанную строку promptString перед считывая строку ввода. Команда promptString может быть пуста.

Это имеет дополнительное преимущество для работы с незарегистрированными типами файлов (к которому не относится принятый ответ).

Ответ 3

Вы можете использовать:

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

Ответ 4

Вы можете получить выгоду (прямо или косвенно и позднее), прочитав эту страницу (легко читайте, понятное и сжатое).

Получение файлов данных в переменную среды (env var)

Я смог добиться успеха с помощью "метода 4b", который дает мне надежду, что в конечном итоге у меня будет успех с 4a.

Ответ 5

Можете ли вы определить дальнейшую обработку?

Вы можете использовать цикл for, чтобы это сделать, но нет простого способа вставить CR/LF в переменную среды, поэтому вы будете иметь все в одной строке. (вы можете обойти это в зависимости от того, что вам нужно делать.)

Таким образом, вы также ограничены текстовыми файлами размером менее 8 килобайт. (Вы не можете создать один env var больше, чем около 8k.)

Предполагаемое предложение цикла for - это то, что вам нужно. Вы обрабатываете файл по одной строке за раз:

(используйте %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

Ответ 6

Создайте файл под названием "SetFile.bat", который содержит следующую строку с отсутствием возврата каретки в конце ее...

set FileContents=

Затем в вашем пакетном файле сделайте что-то вроде этого...

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

% 1 - имя вашего входного файла, а% FileContents% будет содержать содержимое входного файла после вызова. Это будет работать только в одном файле (т.е. Файл без возврата каретки). Вы можете вырезать/заменить возврат каретки из файла перед вызовом% tmp%.bat, если необходимо.

Ответ 7

for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause