пакетные файлы: как прочитать файл?

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

<p>вы можете использовать для команды:</p><pre><code>for /f "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k </code></pre><p>тип</p><pre><code>for /? </code></pre><p>в командной строке. также вы можете <a href="http://www.ericphelps.com/batch/samples/getini.txt">разбирать ini файлы</a> !</p>

<p>под nt-style cmd.exe вы можете проходить по строкам текстового файла с помощью</p><pre><code>for /f %i in (file.txt) do @echo %i </code></pre><p>введите "help for" в командной строке для получения дополнительной информации. (не знаю, работает ли это в любой используемой вами dos)</p>

<p>for-loop обычно работает, но есть некоторые проблемы. for не принимает пустые строки, а строки с более чем 8190 проблематичны. расширение работает только надежно, если отложенное расширение отключено.</p><p>обнаружение cr/lf по сравнению с одиночным lf также кажется немного сложным.<br> также nul-символы проблематичны, так как цикл for немедленно отменяет чтение.</p><p><em> прямое </em> двоичное чтение кажется поэтому практически невозможным.</p><p>проблема с пустыми строками может быть решена с помощью хитрости. приставьте каждую строку к номеру строки, используя команду findstr, и после прочтения удалите префикс.</p><pre><code>@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 ) </code></pre><p><strong> переключение между включенным и отключенным отложенным расширением необходимо </strong> для безопасной работы со строками, такими как <code>!</code> или <code>^^^xy!z</code>.<br> это связано с тем, что строка <code>set "var=%%a"</code> безопасна только с <em> disableddelayedexpansion </em>, в противном случае восклицательные знаки удаляются, а вставки используются в качестве (вторичных) escape-символов и тоже удаляются.<br> но использование переменной <code>var</code> безопасно только с <em> enableddelayedexpansion </em>, так как даже <code>call %%var%%</code> не будет работать с содержимым, подобным <code>"&"&</code>.</p><p><strong> редактировать: добавлен вариант набора/p </strong><br> существует второй способ чтения файла с <code>set /p</code>, единственными недостатками которого является то, что он ограничен ~ 1024 символами в строке и удаляет управляющие символы в конце строки.<br> но преимущество в том, что вам не нужно было задерживать переключение, и легче хранить значения в переменных</p><pre><code>@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! ) ) </code></pre><p><strong> для чтения "двоичного" в шестнадцатеричное представление </strong><br> вы можете посмотреть <a href="https://stackoverflow.com/a/4648636/463115">so: преобразование двоичного файла в представление hex с использованием пакетного файла</a> </p>

<p>один из очень простых способов сделать это - использовать следующую команду:</p><pre><code>set /p mytextfile=< %pathtotextfile%\textfile.txt echo %mytextfile% </code></pre><p>это будет отображать только первую строку текста в текстовом файле. другой способ сделать это - использовать следующую команду:</p><pre><code>type %pathtotextfile%\textfile.txt </code></pre><p>это поместит все данные в текстовый файл на экран. надеюсь это поможет!</p>

<p>ну, есть много разных способов, но если вы хотите только отобразить текст, а не хранить его где-либо, то вы просто используете: <code>findstr /v "randomtextthatnoonewilluse" filename.txt</code></p>

<p>исправленный код:</p><pre><code>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 </code></pre>