web-dev-qa-db-ja.com

テキストファイルの内容をバッチファイル変数に読み込むにはどうすればよいですか?

テキストファイルの内容全体をロードし、さらに処理するために変数にロードできるようにする必要があります。

どうやってやるの?


これは、Roman Odaiskyの答えのおかげでした。

SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i

echo %content%
EndLocal
32
Keng

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 にあります。ロシア語を知らない場合でも、提供されているコードスニペットを使用できます。

16
Roman Odaisky

setコマンドが/pスイッチをサポートしている場合、入力をそのようにパイプできます。

set /p VAR1=<test.txt
set /? |find "/P"

/ Pスイッチを使用すると、ユーザーが入力した入力行に変数の値を設定できます。入力行を読み取る前に、指定されたpromptStringを表示します。 promptStringは空にすることができます。

これには、未登録のファイルタイプで動作するという追加の利点があります(受け入れられた答えではありません)。

51
Will Bickford

さらに処理を定義できますか?

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
2
Ray

次を使用できます。

set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i
2
Curro

次の行を含む「SetFile.bat」というファイルを作成します。このファイルには、末尾にキャリッジリターンなしが含まれます...

set FileContents=

次に、バッチファイルで次のようにします...

   @echo off
   copy SetFile.bat + %1 $tmp$.bat > nul
   call $tmp$.bat
   del $tmp$.bat

%1は入力ファイルの名前で、%FileContents%には呼び出し後の入力ファイルの内容が含まれます。ただし、これは1行のファイル(つまり、キャリッジリターンを含まないファイル)でのみ機能します。必要に応じて、%tmp%.batを呼び出す前に、ファイルからキャリッジリターンを削除または置換できます。

0
pdavis
for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
0
clichok