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

Пакетные файлы: как читать файл?

Как вы можете читать файл (текстовый или двоичный) из пакетного файла? Есть способ прочитать его в двоичном режиме или в текстовом режиме?

4b9b3361

Ответ 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