逐行解析批处理

时间:2013-03-19 06:56:26

标签: parsing variables batch-file return trim

我正在尝试解析另一个逐行输出的函数的输出。要理解该函数,它会返回几行参数和数字,如“top=123456789”或“low=123456789”(不带引号) -

我尝试使用

解析这些行
for /F "delims=" %%a in ('%%I ^| findstr top') do set updir=%%1
set "updir=%1:~4%" 
echo. %updir%

我试图通过修剪像top这样的已知关键字来获得纯数字,然后需要将其设置为var以返回(%~1% ???)到调用函数(其他批处理文件)。

是的,有人可以帮我这个吗?从“=”开始修剪是更好的。

更新:

这是从我链接的脚本返回行的代码。我尝试了几种方法来解析回报,但我看起来似乎是盲目的或者太愚蠢,一切都很奇怪。

for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do (
rem process the HTML line-by-line

org echo(%%I

try1 (echo %%I|findstr top

try2 for /F "delims=" %%a in ('%%I ^| findstr top') do set updir=%%a
try2 echo. %updir%

try3 for /F "delims=" %%a in ('%%I') do findstr top
try3 echo. %2%


)

无效

for /F "tokens=1,2delims==" %%a in ('%%I') do if %1 == top set updir=%%b
echo %updir%

我尝试了下面的delim版本(也是令牌/ delims版本),但我没有做对。

更新解决方案:

对于那些在这里阅读问题的人,还有一些额外的评论:

rem trim whitespace from beginning and end of line
for /f "tokens=*" %%x in ("%%~I") do set "line=%%x"

rem test that trimmed line matches "variable=number"

to find a single item like e.g. "top" you have to add "to" or adjust whole first token
 回声!行! | findstr / i“^ to [a-z] = [0-9] ”> NUL&& (

rem test was successful.  Scrape number.
for /f "tokens=2 delims==" %%x in ("%%I") do set "value=%%x"
echo !value!
)

3 个答案:

答案 0 :(得分:0)

这是否符合您的需求?

for /F "delims=" %%a in ('type file.txt ^| findstr "top low"') do set /a %%a 

set top
set low
echo %top%, %low%

答案 1 :(得分:0)

试试这个:

for /F "tokens=2delims==" %%a in ('findstr top file.txt') do set "updir=%%a"
echo.%updir%

根据您的评论我的新代码:

@echo off &setlocal enabledelayedexpansion
set "string=%%I"
set "string=!string:*top=!"
for /f "delims== " %%z in ("!string!") do set "string=%%z"
echo !string!

..输出:

  

123456789

Edit2:"已添加。

答案 2 :(得分:0)

如果您要做的就是跳过所有行,直到找到与“text = numbers”相匹配的行,然后刮掉该行的数字部分,您需要做的就是:

for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do (

    rem trim whitespace from beginning and end of line
    for /f "tokens=*" %%x in ("%%~I") do set "line=%%x"

    rem test that trimmed line matches "variable=number"
    echo !line! | findstr /i "^[a-z]*=[0-9]*$" >NUL && (

        rem test was successful.  Scrape number.
        for /f "tokens=2 delims==" %%x in ("%%I") do set "value=%%x"
    )
)
无论如何,我认为这是对的。我没有测试它。

但是我怀疑这不会像你想要的那样起作用,因为what you are scraping可能包含HTML标签。除非您粘贴示例页面的HTML源代码,否则我们可能无法帮助您删除HTML,并解释您希望从该源代码示例中删除的内容。