这是另一种使用for /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
这里的优点是不需要写出单独的文件。
但是,请注意,这些方法中的任何一种(set /p或for /f with type )都会在输入文件( <、>、|等)中出现特殊 shell 字符的问题。为了解决这个问题,可以使用我不久前编写的一个名为 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
请注意,这种方法还有一个额外的优势,即不会“阻塞”特殊的 shell 字符 (shellesc)。
高温下,
账单