我有这些文件在我要提取的第一行中包含一个名称。我接近的所有方法都会导致错误或者什么也不给我。
可以在此处找到示例文件:https://www.dropbox.com/s/0kcgj8vr3wii33s/FORS2.2011-10-23T23_59_20.355_out.fits?dl=0
我希望提取“PN-G013.3 + 01.1”,它位于第一行(在本例中为第2091列,每个文件的名称都是唯一的),并被归类为“OBJECT”。
提前谢谢!
彼得
答案 0 :(得分:2)
有趣的问题!可以使用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%"
答案 1 :(得分:1)
我怀疑你有问题因为它有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%