【问题标题】:Windows batch goto inside FOR loopWindows 批处理转到 FOR 循环内
【发布时间】:2014-08-24 12:23:14
【问题描述】:

我有一个 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
)

我的输出是这样的:

主页0 \\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 错误:未找到网络路径。 主页2 \\%c\HKLM\SOFTWARE\ORACLE\HOME2 错误:未找到网络路径。 主页3 \\%c\HKLM\SOFTWARE\ORACLE\HOME3 错误:未找到网络路径。 主页4 \\%c\HKLM\SOFTWARE\ORACLE\HOME4 错误:未找到网络路径。 与 %a 的连接已删除

当我执行 goto cicle 时,FOR 循环似乎不再知道 %%c 和 %%c 是什么。我真的不知道我做错了什么。

【问题讨论】:

  • 如果在for 循环中使用goto 命令,for 将被取消,不再有迭代,for 可替换参数/变量超出范围。
  • 好吧……不知道……
  • 那么,有没有办法做我想做的事?
  • for /l %%x in (0 1 3) do .... 命令替换你的内部循环。
  • 谢谢!非常感谢!!!

标签: windows batch-file for-loop goto


【解决方案1】:

试试

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

请注意,现在有一个名为cicle 的子例程,它带有参数"%%a""%%c"cicle 例程中,%%a 变成了%~1(第一个参数,减去引号) 并且 %%c 变成了 %~2(第二个参数,减去引号)。

引号仅在传递的参数包含分隔符的情况下存在,这在您当前的情况下不太可能。

请参阅提示符中的call /? 获取 docco。

另请注意,set "var=variable" 用于字符串分配,以确保分配的值中不包含不需要的尾随空格。 set /a 语法没有这个问题,所以兔子的耳朵不是必须的。

【讨论】:

  • MC ND 答案在现场!最好的方法是做一个 for /l 循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 2011-05-19
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多