Ped*_*les 3 windows for-loop goto batch-file
我有一个Windows批处理文件来读取文件,从文件中获取一些信息,例如计算机IP,然后打印该计算机的一些注册表值,如下所示:
for /f "skip=1 tokens=1,2,3,4,5,6,* delims=;" %%a in ('findstr /R "^" z:\csp\levantamento\levantamentoNOVO.csv') do (
set /A "HOME=0"
:cicle
echo HOME%HOME%
echo \\%%c\HKLM\SOFTWARE\ORACLE\HOME%HOME%
reg query \\%%c\HKLM\SOFTWARE\ORACLE\HOME%HOME% /v ORACLE_HOME
if %HOME% leq 3 (
set /A "HOME+=1"
goto cicle
) else (
echo.
)
echo Conenction to %%a deleted
)
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的:
HOME0
\\ 10.13.3.27 \ HKLM \ SOFTWARE \ ORACLE \ HOME0
HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ HOME0
ORACLE_HOME REG_EXPAND_SZ d:\ oracle \ 806
首页1
\\%c \ HKLM \ SOFTWARE \ ORACLE \ HOME1
错误:找不到网络路径。
HOME2
\\%c \ HKLM \ SOFTWARE \ ORACLE \ HOME2
错误:找不到网络路径。
HOME3
\\%c \ HKLM \ SOFTWARE \ ORACLE \ HOME3
错误:找不到网络路径。
HOME4
\\%c \ HKLM \ SOFTWARE \ ORACLE \ HOME4
错误:找不到网络路径。
与%a的连接已删除
当我执行goto cicle时,似乎FOR循环不再知道%% c和%% c是。我真的不知道我在做什么错。
尝试
for /f "skip=1 tokens=1,2,3,4,5,6,* delims=;" %%a in ('findstr /R "^" z:\csp\levantamento\levantamentoNOVO.csv') do (
set /A HOME=0
call :cicle "%%a" "%%c"
)
:: what-to-do-after-for goes in here
goto :eof
:cicle
echo HOME%HOME%
echo \\%~2\HKLM\SOFTWARE\ORACLE\HOME%HOME%
reg query \\%~2\HKLM\SOFTWARE\ORACLE\HOME%HOME% /v ORACLE_HOME
if %HOME% leq 3 (
set /A HOME+=1
goto cicle
)
echo.
echo Connection to %~1 deleted
goto :eof
Run Code Online (Sandbox Code Playgroud)
请注意,现在有一个名为的子例程cicle,该子例程带有参数,"%%a"并且"%%c"在该cicle例程内,%%a变成%~1了什么(第一个参数,减去引号)和%%c变成%~2了什么(第二个参数,减去引号)。
仅在要传递的参数包含分隔符的情况下才使用引号,这在当前情况下不太可能。
看到call /?从提示docco。
还要注意,set "var=variable"它在字符串分配中用于确保分配的值中不包含不需要的尾随空格。该set /a语法不存在这个问题,所以兔子的耳朵是没有必要的。
| 归档时间: |
|
| 查看次数: |
1996 次 |
| 最近记录: |