Batch file CMD bat为什么%%a在第一次循环后会丢失其值?

Batch file CMD bat为什么%%a在第一次循环后会丢失其值?,batch-file,cmd,Batch File,Cmd,为什么此bat文件在找到后忘记%%a?我试图了解For/f是如何工作的,但是%%a在:theFound之后被忘记了 谢谢你的关注 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

为什么此bat文件在找到后忘记%%a?我试图了解For/f是如何工作的,但是%%a在:theFound之后被忘记了

谢谢你的关注

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
)

跳进一个圈里不起作用,它会打破这个圈。相反,您可以调用一个子例程(使用
%%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

(额外奖励:你不需要)

跳入一个循环中不起作用,它会打破循环。相反,您可以调用一个子例程(使用
%%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

(奖励:您不需要)

不要在
循环中使用
goto
标签。它们会中断循环(因此所有循环变量都会丢失),不会在循环中使用
goto
内的标签。它们会破坏循环(因此,所有循环变量都会丢失)