37

テキスト ファイルの内容全体を読み込んで、それを変数に読み込んでさらに処理できるようにする必要があります。

どうやってやるの?


Roman Odaisky's answer のおかげで私がしたことは次のとおりです。

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

echo %content%
EndLocal
4

7 に答える 7

52

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

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

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

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

于 2013-01-31T20:30:08.140 に答える
17

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

于 2008-09-25T15:49:57.733 に答える
2

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

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
于 2008-09-25T16:14:30.420 に答える
2

次を使用できます。

set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i
于 2008-09-25T16:23:42.660 に答える
0

末尾に改行がない次の行を含む「SetFile.bat」というファイルを作成します...

set FileContents=

次に、バッチファイルで次のようなことを行います...

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

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

于 2008-09-25T15:58:48.040 に答える
0
for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause
于 2014-08-04T15:30:39.097 に答える