テキストファイルの内容全体をロードし、さらに処理するために変数にロードできるようにする必要があります。
どうやってやるの?
これは、Roman Odaiskyの答えのおかげでした。
SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i
echo %content%
EndLocal
for
を使用します:
set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i
たぶん、あなたはsetlocal enabledelayedexpansion
ではなく!content!
を実行し、そして/または%content%
を使用する必要があるでしょう。近くにMS Windowsがないので、テストできません(同じようにお願いします:-)。
私が知っている最高のbatch-file-black-magic-referenceは http://www.rsdn.ru/article/winshell/batanyca.xml にあります。ロシア語を知らない場合でも、提供されているコードスニペットを使用できます。
set
コマンドが/p
スイッチをサポートしている場合、入力をそのようにパイプできます。
set /p VAR1=<test.txt
set /? |find "/P"
/ Pスイッチを使用すると、ユーザーが入力した入力行に変数の値を設定できます。入力行を読み取る前に、指定されたpromptStringを表示します。 promptStringは空にすることができます。
これには、未登録のファイルタイプで動作するという追加の利点があります(受け入れられた答えではありません)。
さらに処理を定義できますか?
Forループを使用してほとんどこれを行うことができますが、CR/LFを環境変数に挿入する簡単な方法はないため、すべてを1行に収めます。 (何をする必要があるかに応じて、これを回避できる場合があります。)
また、この方法で約8k未満のテキストファイルに制限されます。 (約8kより大きい単一のenv変数を作成することはできません。)
ビルのforループの提案は、おそらく必要なものです。ファイルを一度に1行ずつ処理します。
(つかいます %i
コマンドラインで%%i
バッチファイル内)
for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i
より高度な:
for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
goto :fin
:part2
echo %1
::do further processing here
goto :eof
:fin
次を使用できます。
set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i
次の行を含む「SetFile.bat」というファイルを作成します。このファイルには、末尾にキャリッジリターンなしが含まれます...
set FileContents=
次に、バッチファイルで次のようにします...
@echo off
copy SetFile.bat + %1 $tmp$.bat > nul
call $tmp$.bat
del $tmp$.bat
%1は入力ファイルの名前で、%FileContents%には呼び出し後の入力ファイルの内容が含まれます。ただし、これは1行のファイル(つまり、キャリッジリターンを含まないファイル)でのみ機能します。必要に応じて、%tmp%.batを呼び出す前に、ファイルからキャリッジリターンを削除または置換できます。
for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause