Пакетные файлы: Как прочитать файл? - PullRequest
89 голосов
/ 15 октября 2008

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

Ответы [ 8 ]

64 голосов
/ 15 октября 2008

В NT-style cmd.exe вы можете циклически проходить по строкам текстового файла с помощью

FOR /F %i IN (file.txt) DO @echo %i

Введите «help for» в командной строке для получения дополнительной информации. (не знаю, работает ли это в любой используемой вами DOS)

39 голосов
/ 15 октября 2008

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

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

Тип

for /?

в командной строке. Также вы можете разбирать ini файлы !

35 голосов
/ 25 декабря 2010

FOR-LOOP обычно работает, но есть некоторые проблемы. FOR не принимает пустые строки, а строки с более чем 8190 проблематичны. Расширение работает только надежно, если отложенное расширение отключено.

Обнаружение CR / LF по сравнению с одиночным LF также кажется немного сложным.
Также NUL-символы проблематичны, так как цикл FOR немедленно отменяет чтение.

Прямое двоичное считывание кажется почти невозможным.

Проблема с пустыми строками может быть решена с помощью хитрости. Приставьте каждую строку к номеру строки, используя команду 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%% не удастся с таким содержимым, как "&"&.

РЕДАКТИРОВАТЬ: Добавлен вариант набора / р
Существует второй способ чтения файла с 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 с использованием командного файла

6 голосов
/ 11 августа 2017

Один очень простой способ сделать это - использовать следующую команду:

set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%

Это будет отображать только первую строку текста в текстовом файле. Другой способ сделать это - использовать следующую команду:

type %pathtotextfile%\textfile.txt

Это поместит все данные в текстовом файле на экран. Надеюсь, это поможет!

1 голос
/ 14 сентября 2016

Ну, есть много разных способов, но если вы хотите только ОТОБРАЖАТЬ текст, а не хранить его где-либо, тогда просто используйте: findstr /v "randomtextthatnoonewilluse" filename.txt

0 голосов
/ 18 октября 2018

Код, который отображает содержимое файла myfile.txt на экране

set% filecontent% = 0
введите% filename% >>% filecontent%
echo% filecontent%

0 голосов
/ 18 мая 2018

Использование:
set /p var=< file.ext
Это самый простой способ сделать это работает на большинстве версий пакета.

0 голосов
/ 22 декабря 2014

, если вы хотите просто отобразить его на cmd, вы можете использовать это:

cat myfile.txt 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...