Как вы можете читать файл (текстовый или двоичный) из пакетного файла? Есть способ прочитать его в двоичном режиме или в текстовом режиме?
Пакетные файлы: как читать файл?
Ответ 1
Вы можете использовать команду for:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Тип
for /?
в командной строке. Кроме того, вы можете разбор ini файлов!
Ответ 2
В стиле cmd.exe в стиле NT вы можете прокручивать строки текстового файла с помощью
FOR /F %i IN (file.txt) DO @echo %i
Введите "help for" в командной строке для получения дополнительной информации. (не знаю, работает ли это во всех "DOS", которые вы используете)
Ответ 3
Обычно 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, остальные восклицательные знаки удаляются, а каретки используются как (вторичные) escape-символы, и они также удаляются.
Но использование переменной var
безопасно только с EnabledDelayedExpansion, так как даже call %%var%%
будет терпеть неудачу с контентом, например "&"&
.
EDIT: Добавлен вариант 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!
)
)
Для чтения "двоичный" в шестнадцатеричном представлении
Вы можете посмотреть SO: преобразование двоичного файла в представление HEX с помощью пакетного файла
Ответ 4
Один очень простой способ сделать это - использовать следующую команду:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Это отображает только первую строку текста в текстовом файле. Другой способ, которым вы можете это сделать, - использовать следующую команду:
type %pathtotextfile%\textfile.txt
Это поместит все данные в текстовый файл на экран. Надеюсь, это поможет!
Ответ 5
Ну, у вас много разных способов, но если вы хотите только отображать текст, а не хранить его в любом месте, то вы просто используете: findstr /v "randomtextthatnoonewilluse" filename.txt
Ответ 6
Исправленный код:
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
Ответ 7
Использование: set/p var=< file.ext
Это самый простой способ сделать это, работает на большинстве версий пакета.
Ответ 8
Код, который отображает содержимое файла myfile.txt на экране
установить% filecontent% = 0
введите% filename% >>% filecontent%
echo% filecontent%
Ответ 9
если вы хотите просто отобразить его на cmd, вы можете использовать это:
cat myfile.txt