Как вы можете прочитать файл (текстовый или двоичный) из командного файла? Есть способ прочитать его в бинарном или текстовом режиме?
TYPE [fileName]
для MS-Dos.
Как вы можете прочитать файл (текстовый или двоичный) из командного файла? Есть способ прочитать его в бинарном или текстовом режиме?
TYPE [fileName]
для MS-Dos.
Ответы:
Вы можете использовать команду for:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Тип
for /?
в командной строке. Также вы можете анализировать ini-файлы !
for /?
с командой будет анализировать каждую строку в myfile.txt, игнорируя строки, начинающиеся с точки с запятой, передавая 2-й и 3-й токены из каждой строки в тело for, с токенами, разделенными запятыми и / или пробелами.
В cmd.exe в стиле NT вы можете перебирать строки текстового файла с помощью
FOR /F %i IN (file.txt) DO @echo %i
Для получения дополнительных сведений введите в командной строке «справка для». (не знаю, работает ли это в той "DOS", которую вы используете)
%%i
.
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 , так как даже a не call %%var%%
будет работать с таким содержимым, как "&"&
.
РЕДАКТИРОВАТЬ: добавлен вариант 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: преобразование двоичного файла в шестнадцатеричное представление с использованием пакетного файла
set /p
. Я использовал set /p value=< result.txt
получение первой строки из текстового файла
0x1A
? ведет for /F
себя так же, как и с 0x00
символами NUL ( )?
:
или ;
или содержат!
Один очень простой способ сделать это - использовать следующую команду:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Это отобразит только первую строку текста в текстовом файле. Другой способ сделать это - использовать следующую команду:
type %pathtotextfile%\textfile.txt
Это поместит все данные из текстового файла на экран. Надеюсь это поможет!
Что ж, есть много разных способов, но если вы хотите только ОТОБРАЖАТЬ текст, а не СОХРАНИТЬ его где-либо, вы просто используете: findstr /v "randomtextthatnoonewilluse" filename.txt
Исправленный код:
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
eol=
и delims=
они излишни, set line=%%a
должны использовать кавычки и без переключения режима отложенного расширения, код не может читать восклицательные знаки