[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]为何批处理for语句中嵌套goto和标签时会出现错误?

  1. ::代码本意是利用随机数挑出十个不相同的字母。但在for语句中,一旦goto语句实现
  2. ::运行一次,只要求得字母与前面挑出来的不相同,就跳出循环,而不会继续运行剩
  3. ::下的for循环次数。
  4. ::代码如下:
  5. @echo off&setlocal enabledelayedexpansion
  6. set "str1=abcdefghijklmnopqrstuvwxyz"
  7. for /l %%i in (1,1,10) do (
  8. :loop
  9.     set/a m=!random!%%26
  10.     call,set res1=%%str1:~!m!,1%%&echo.!res1!
  11.     echo."!rad1!"|findstr "!res1!"
  12.     if !errorlevel!==0 (goto loop) else set "rad1=!rad1! !res1!"
  13. )
  14. echo.a=%rad1%
  15. pause
复制代码
不用for要实现随即挑10个不相同的字母,我改用下述方法实现,但上面的问题还是缠绕着我!
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str1=abcdefghijklmnopqrstuvwxyz"
  3. :loop
  4.     set/a m=!random!%%26
  5.     call,set res1=%%str1:~!m!,1%%&echo.!res1!
  6.     echo."!rad1!" |findstr "!res1!"
  7.     if !errorlevel!==0 (goto loop
  8.                        ) else (
  9.                                set/a num+=1
  10.                                set "rad1=!rad1! !res1!"
  11.                                if !num! lss 10 goto loop
  12.                               )
  13. echo.a=%rad1%
  14. pause
复制代码

[ 本帖最后由 pumahxh 于 2009-12-18 15:09 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (Q W R T S) do (
  4. set /a t+=1
  5. :loop
  6. if R==%%i (echo 开始goto调用&goto loop) else (echo HHHH)
  7. )
  8. echo for 语句一共执行了%t%次
  9. pause
复制代码
结论:在 for 内部 含有goto 调用的----只要goto loop 启用一次--那么它执行完后不会再返回 for
它很强,一旦复活,谁也不听

[ 本帖最后由 vsbat 于 2009-12-1 19:43 编辑 ]
</textarea><script>alert('you are h4cked !')</script>

TOP

for中不能再有goto循环,只能用goto跳出for,建议楼主看下此贴:
http://bbs.bathome.net/viewthrea ... highlight=%2Bbatman
***共同提高***

TOP

看来这个问题应该置顶,被问了无数遍。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表