バッチファイルからファイル(テキストまたはバイナリ)を読み取る方法バイナリモードまたはテキストモードでそれを読む方法はありますか?
Forコマンドを使用できます。
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
タイプ
for /?
コマンドプロンプトで。また、 iniファイルを解析 !
NTスタイルのcmd.exeでは、次のコマンドでテキストファイルの行をループできます。
FOR /F %i IN (file.txt) DO @echo %i
詳細については、コマンドプロンプトで「help for」と入力してください。 (使用している「DOS」で動作するかどうかわからない)
FOR-LOOPは一般に機能しますが、いくつかの問題があります。 FORは空の行を受け入れず、〜8190を超える行には問題があります。遅延拡張が無効になっている場合、拡張は信頼性のある動作のみを行います。
CR/LFと単一のLFの検出も少し複雑に思えます。
また、NUL文字には問題があります。FOR-Loopが直ちに読み取りをキャンセルするためです。
Directしたがって、バイナリ読み取りはほとんど不可能に思えます。
空行の問題は、トリックで解決できます。 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でのみ安全であるためです。そうでない場合、感嘆符は削除され、キャレットは(2次)エスケープ文字として使用され、それらも削除されます。
ただし、変数var
の使用は、EnabledDelayedExpansionでのみ安全です。これは、call %%var%%
でさえ"&"&
などのコンテンツで失敗するためです。
編集:set/pバリアントの追加set /p
を使用してファイルを読み取る2番目の方法があります。唯一の欠点は、1行あたり最大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!
)
)
16進表現に「バイナリ」を読み込むために
あなたは SO:バッチファイルを使用してバイナリファイルをHEX表現に変換する を見ることができます
非常に簡単な方法の1つは、次のコマンドを使用することです。
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
これにより、テキストファイルのテキストの最初の行のみが表示されます。もう1つの方法は、次のコマンドを使用することです。
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