0

行ごとに出力される別の関数の出力を解析しようとしています。関数を理解するために、数行のパラメーターと " 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 バージョン (tokens/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[az] =[0-9] " >NUL && (

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

3 に答える 3

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:"追加されました。

于 2013-03-19T09:01:26.033 に答える
0

「text=numerics」に一致する行が見つかるまですべての行をスキップし、その行の数値部分をスクレイピングすることだけが必要な場合は、次のことを行う必要があります。

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"
    )
)

とにかく、それは正しいと思います。私はそれをテストしませんでした。

しかし、スクレイピングしているものにはおそらく HTML タグが含まれているため、これは意図したとおりに機能しないと思われます。サンプルページの HTML ソースをペーストビンし、そのソースサンプルから何をスクレイピングしたいかを説明しない限り、おそらく HTML をスクレイピングする手助けはできないでしょう。

于 2013-03-19T23:35:24.703 に答える
0

これはあなたのニーズに合っていますか?

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

set top
set low
echo %top%, %low%
于 2013-03-19T08:20:23.647 に答える