/fとset/pに依存しないタイプを使用して、ファイルの最初の行のみを読み取る別の手法を次に示します。
@echo off
setlocal enableextensions enabledelayedexpansion
set VAR=
set CURRLINE=0
for /f "delims=" %%a in ('type "test.txt"') do (
set /a CURRLINE+=1
if !CURRLINE! EQU 1 (
set VAR=%%a
goto :DONE
)
)
:DONE
echo %VAR%
endlocal
ここでの利点は、別のファイルを書き出す必要がないことです。
ただし、これらのアプローチ(/pまたは/fをtypeで設定)のいずれかでは、入力ファイル内の特殊なシェル文字(<、>、|など)で問題が発生することに注意してください。この問題を回避するには、しばらく前に書いたshellesc.exe(http://www.westmesatech.com/sst.html)という小さなユーティリティを使用して、特殊文字を「エスケープ」することができます。ただし、これらのツールを使用する場合は、linex.exeを使用して目的の行を選択し、少し少ないコードで結果を取得することもできます。
@echo off
setlocal enableextensions
set VAR=
for /f "delims=" %%a in ('type "test.txt" ^| linex -l 1 ^| shellesc') do set VAR=%%a
echo %VAR%
endlocal
このアプローチには、特別なシェル文字(shellesc)を「窒息」させないという追加の利点があることに注意してください。
HTH、
明細書