CMD bat为什么%% a在第一次循环后会丢失它的值?

时间:2016-04-22 19:33:20

标签: batch-file cmd

为什么这个bat文件忘记了%% a after:theFound?我试图理解For / f是如何工作的,但是在%theFound

之后忘记了%% a

感谢您的光临。

FOR /F %%a in (c:\temp\computers.txt) do (
echo %%a
set comPort=0
:comLoop
set /a comPort=%comPort%+1
reg query \\%%a\HKEY_LOCAL_MACHINE\SOFTWARE\Pergamon\AKT\Dienst\XFS\PASION_CM24_COM%comPort% 
if errorlevel 0 goto theFound
if %comPort% LSS 10 goto comLoop
echo No CRU found >>c:\temp\output1.txt
:theFound
reg query \\%%a\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOSA/XFS_ROOT\SERVICE_PROVIDERS\PASION_CM24_COM%comPort%\Firmware>>c:\temp\output1.txt
)

1 个答案:

答案 0 :(得分:5)

在循环内跳转不起作用,它会打破循环。相反,您可以调用子例程(以%%a作为参数 - 在子例程中它被引用为%1 =“第一个参数”)。在子程序中,您可以根据需要跳转:

FOR /F %%a in (c:\temp\computers.txt) do call :doit %%a
goto :eof

:doit
set comPort=0
:comLoop
set /a comPort=%comPort%+1
reg query \\%1\HKEY_LOCAL_MACHINE\SOFTWARE\Pergamon\AKT\Dienst\XFS\PASION_CM24_COM%comPort% 
if errorlevel 0 goto theFound
if %comPort% LSS 10 goto comLoop
echo No CRU found >>c:\temp\output1.txt
:theFound
reg query \\%1\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOSA/XFS_ROOT\SERVICE_PROVIDERS\PASION_CM24_COM%comPort%\Firmware>>c:\temp\output1.txt
goto :eof

(加分:你不需要delayed expansion

相关问题