いくつかのコードを処理するためにバッチファイルを開始します。一度に別のバッチファイルを呼び出して変数が返されるはずですが、ローカル/エンドローカルに関するマニュアルページで説明されているメソッドはここでは機能しないようです。何が間違っていますか?
最初のバッチファイル:
@ECHO OFF
setlocal
call secondbatchfile.bat xyz
echo. [%val1%]
2番目のバッチファイル:
@if (@a==@b) @end /* <== btw what does this code do ???
@echo off
setlocal enabledelayedexpansion
set "URL=%~1"
set bla bla ...
do bla bla ...
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 "^to[a-z]*=[0-9]*" >NUL && (
rem test was successful. Scrape number.
for /f "tokens=2 delims==" %%x in ("%%I") do set "val1=%%x"
echo !val1! <== this works
ENDLOCAL & SET top=%val1% <== this not
)
)
これにより、次のようになります。
c:\test>firstbatchfile.bat
123456789 <== this works
[] <== this not
!val1!
またはのようなreturnvarの異なる構文を試し%%val1
ました-どれも機能しませんでした。私は何が欠けていますか?
更新: 私が試したサイトの他の例に関して:
call seconbatchfile.bat xyz ret1
echo. [%2%] [%ret1%]
およびseconファイルが変更されました:
rem ENDLOCAL & SET %2=!val1!
どちらも動作しませんか?
解決:
2番目のバッチファイルは、rojoがWebサイト全体を読み取る元のスクリプトにすることができます。トリムと一致の構文行を残して、関連する一致のみを返します。
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 && (
echo(%%I
)
)
そして、それを呼び出す最初のバッチファイルは、次のような2つの必要なパラメータの検索を実行します。
@ECHO OFF
setlocal
for /f "delims=" %%I in ('secondbatchfile.bat "http://xyz"') do (
echo %%I | findstr /i "top" >NUL && (
for /f "tokens=2 delims==" %%x in ("%%I") do (
set "updir=%%x"
)
)
echo %%I | findstr /i "low" >NUL && (
for /f "tokens=2 delims==" %%x in ("%%I") do (
set "lowdir=%%x"
)
)
)
echo.[%updir%]
echo.[%lowdir%]
素晴らしいコードを提供してくれたrojoに感謝します