テキスト ファイルの内容をバッチ ファイル変数にロードするにはどうすればよいですか?
-
02-07-2019 - |
質問
テキスト ファイルの内容全体をロードし、さらに処理するためにそれを変数にロードできる必要があります。
どうやってやるの?
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 がないのでテストできません (皆さんもそうしてほしい :-)。
私が知る限り最高のバッチファイル black-magic リファレンスは次の場所にあります。 http://www.rsdn.ru/article/winshell/matanyca.xml. 。ロシア語が分からない場合でも、提供されているコード スニペットを使用できます。
他のヒント
set コマンドが /p スイッチをサポートしている場合は、そのように入力をパイプできます。
set /p VAR1=<test.txt
セット /?|「/P」を検索
/Pスイッチを使用すると、ユーザーが入力した入力の行に変数の値を設定できます。入力ラインを読む前に、指定されたプロンプトストリングを表示します。プロンプト文字列は空にすることもできます。
これには、未登録のファイルタイプでも機能するという追加の利点があります(受け入れられた回答では機能しません)。
次のものが使用できます。
set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i
さらなる処理を定義できますか?
for ループを使用するとほぼこれを行うことができますが、CR/LF を環境変数に挿入する簡単な方法はないため、すべてを 1 行で行うことになります。(何をする必要があるかによっては、これを回避できる場合があります。)
この方法では、テキスト ファイルの数も約 8,000 未満に制限されます。(約 8k を超える単一の環境変数を作成することはできません。)
Bill の 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
次の行を含む「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