Як ви можете прочитати файл (текстовий або двійковий) з пакетного файлу? Є спосіб прочитати його у двійковому або текстовому режимі?
TYPE [fileName]
для MS-Dos.
Як ви можете прочитати файл (текстовий або двійковий) з пакетного файлу? Є спосіб прочитати його у двійковому або текстовому режимі?
TYPE [fileName]
для MS-Dos.
Відповіді:
Ви можете використовувати для команди:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Тип
for /?
в командному рядку. Крім того, ви можете розібрати файли ini !
for /?
з командою буде проаналізовано кожен рядок у myfile.txt, ігноруючи рядки, які починаються з крапки з комою, передаючи 2-й та 3-й жетони від кожного рядка до тіла для тіленів, розміщених комами та / або пробілами.
У розділі cmd.exe у стилі NT ви можете провести цикл через рядки текстового файлу
FOR /F %i IN (file.txt) DO @echo %i
Для отримання додаткової інформації введіть "help for" у командному рядку. (не знаю, чи працює це в будь-якому "DOS", який ви використовуєте)
%%i
.
В основному 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 , інакше знаки оклику видаляються, а піклування використовуються як (вторинні) символи втечі, і вони також видаляються.
Але використання змінної 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-представлення за допомогою пакетного файлу
set /p
. Я використав set /p value=< result.txt
перший рядок із текстового файлу
0x1A
? дійсно for /F
поводяться так само, як і з NUL ( 0x00
) символів?
:
або ;
або містить!
Один дуже простий спосіб зробити це - використовувати таку команду:
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
повинні використовувати лапки і не перемикаючи режим уповільненого розширення, код не може читати знаки оклику