如何使用批处理从文件的第一行提取字符串?

How to extract a string from the first line of a file using batch?

我有这些文件,在我希望提取的第一行中包含一个名称。我使用的所有方法要么导致错误,要么什么都不给我。

可在此处找到示例文件:https://www.dropbox.com/s/0kcgj8vr3wii33s/FORS2.2011-10-23T23_59_20.355_out.fits?dl=0

我想提取 "PN-G013.3+01.1",它位于第一行(在本例中为第 2091 列,每个文件的名称都是唯一的)并被归类为 "OBJECT".

提前致谢!

彼得

我怀疑你有问题,因为它有 Unix 行尾而不是 DOS 风格的行尾。

这似乎可行,但它有点脆弱 - 与您链接的示例内容的位置有关:

for /f "usebackq delims== tokens=28" %%a in (`findstr /n "OBJECT" FORS2.2011-10-23T23_59_20.355_out.fits`) do (
set x=%%a
)
set x=%x:'=%
for /f "tokens=1" %%a in ("%x%") do (set x=%%a)
echo %x%

如果始终是 14 个字符的名称字段,您可以跳过最后一个 for 循环并尝试:

for /f "usebackq delims== tokens=28" %%a in (`findstr /n "OBJECT" FORS2.2011-10-23T23_59_20.355_out.fits`) do (
set x=%%a
)
set x=%x:~2,14%
echo %x%

有趣的问题!可以使用 set /P 命令通过 1023 个字符长的块读取长行;只要该行的长度小于 8193 个字符,此方法就有效。此方法还允许您搜索整个文件中的任何字符串,而不仅仅是第一行,并且不需要任何硬编码长度。

@echo off
setlocal EnableDelayedExpansion

set "file=FORS2.2011-10-23T23_59_20.355_out.fits"
call :ReadLongLine < "%file%"
goto :EOF


:ReadLongLine

set "line="

:nextPart
   set "part="
   set /P part=
   set "line=!line!!part!"
if "!part:~1022!" neq "" goto nextPart

set "line=!line:*OBJECT=!"
for /F "tokens=2 delims='" %%a in ("!line:~0,80!") do set "result=%%a"
echo Result: "%result%"