テキスト ファイルの内容全体を読み込んで、それを変数に読み込んでさらに処理できるようにする必要があります。
どうやってやるの?
Roman Odaisky's answer のおかげで私がしたことは次のとおりです。
SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i
echo %content%
EndLocal
テキスト ファイルの内容全体を読み込んで、それを変数に読み込んでさらに処理できるようにする必要があります。
どうやってやるの?
Roman Odaisky's answer のおかげで私がしたことは次のとおりです。
SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i
echo %content%
EndLocal
set
コマンドがスイッチをサポートしている場合は/p
、そのように入力をパイプできます。
set /p VAR1=<test.txt
set /? |find "/P"
/P スイッチを使用すると、ユーザーが入力した入力行に変数の値を設定できます。入力行を読み取る前に、指定されたプロンプト文字列を表示します。promptString は空にすることができます。
これには、未登録のファイルタイプで機能するという追加の利点があります(受け入れられた回答では機能しません)。
for
次の行に沿って何かを使用します。
set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i
たぶん、ではなく実行setlocal enabledelayedexpansion
および/または使用する必要があります。近くに MS Windows がないため、テストできません (同じことを願っています :-)。!content!
%content%
私が知っている最高のバッチ ファイル ブラック マジック リファレンスはhttp://www.rsdn.ru/article/winshell/batanyca.xmlにあります。ロシア語がわからない場合でも、提供されているコード スニペットを使用できます。
さらなる処理を定義できますか?
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