Board logo

标题: [网络连接] 这个bat会死循环,为什么? [打印本页]

作者: joshatt    时间: 2018-10-25 19:07     标题: 这个bat会死循环,为什么?

网上下载的, 按照说明试了几次了, 无论是直接运行, 还是右键用管理员运行, 都会死循环-----三四个DOS小窗口依次出现,(前一个消失, 后一个才弹出), 并循环无穷. 请高手帮忙看看问题在哪里......我是win7x64.
  1. :Menu
  2. cls
  3. echo 标题:「 %tle% 」
  4. echo ---------------------------------------
  5. echo 菜单:
  6. echo       ①  手动设置 Teredo 服务器
  7. echo.
  8. echo       ②  查看 Teredo 隧道状态
  9. echo.
  10. echo       Q  退出
复制代码
以上这部分应该是首先弹出的窗口, 背景是绿色的. 而实际上, 我所看到的死循环的窗口,都是黑色,好像没有字,总之还没能运行到代码的这一部分.

所有代码:
  1. @echo off
  2. :Init
  3. Title CMD
  4. MODE con: Cols=40 Lines=23
  5. :BatchGotAdmin
  6. :--------------------------------------
  7. >nul 2>&1 "%SYSTEMROOT%\System32\cacls.exe" "%SYSTEMROOT%\System32\config\system"
  8. if '%ERRORLEVEL%' neq '0' (
  9.     Goto UACPrompt
  10. ) else ( Goto GotAdmin )
  11. :UACPrompt
  12.     echo 获取管理员权限。。。
  13.     echo Set UAC = CreateObject^("Shell.Application"^) > "%TEMP%\getAdmin.vbs"
  14.     Set "params=%* "
  15.     Set "params=%params:"=""%"
  16.     echo UAC.ShellExecute "cmd.exe", "/c """"%~f0"" %params%""", "", "runas", 1 >> "%TEMP%\getAdmin.vbs"
  17.     "%TEMP%\getAdmin.vbs"
  18.     del /q /f "%TEMP%\getAdmin.vbs"
  19.     Exit /b
  20. :GotAdmin
  21.     Pushd "%CD%"
  22.     cd /d "%~dp0"
  23. :--------------------------------------
  24. :: 判断输入参数
  25. if /i `%1` == `enableIPv6` Goto EnableIPv6
  26. if /i `%1` == `disableIPv6` Goto DisableIPv6
  27. :Start
  28. Color 2f
  29. MODE con: Cols=40 Lines=23
  30. Set tle=IPv6 配置
  31. Set var=0
  32. :Menu
  33. cls
  34. echo 标题:「 %tle% 」
  35. echo ---------------------------------------
  36. echo 菜单:
  37. echo       ①  手动设置 Teredo 服务器
  38. echo.
  39. echo       ②  查看 Teredo 隧道状态
  40. echo.
  41. echo       Q  退出
  42. echo.
  43. echo ---------------------------------------
  44. if %var% neq 0 echo (输入无效请重新输入)
  45. Set choice=
  46. Set /p choice=选择:
  47. Set "choice=%choice:"=%"
  48. if "%choice:~-1%"=="=" Goto Menu
  49. if "%choice%"=="" Goto Menu
  50. if /i "%choice%" == "1" cls&Goto ManuTeredo
  51. if /i "%choice%" == "2" cls&Goto ShowState
  52. if /i "%choice%" == "q" Popd&Exit
  53. Set var=1
  54. Goto Menu
  55. :ShowState
  56. Color 3e
  57. MODE con: Cols=56 Lines=23
  58. netsh interface teredo show state
  59. echo.&Pause
  60. Goto End
  61. :ManuTeredo
  62. Color 3f
  63. MODE con: Cols=40 Lines=27
  64. Set tle2=手动设置 Teredo 服务器
  65. Set var2=0
  66. Set manu1=win10.ipv6.microsoft.com.
  67. Set manu2=teredo2.remlab.net.
  68. Set manu3=win1710.ipv6.microsoft.com.
  69. Set manu4=teredo-debian.remlab.net.
  70. Set manu5=teredo.ginzado.ne.jp.
  71. Set manu6=teredo.iks-jena.de.
  72. Set manu7=teredo.ngix.ne.kr.
  73. Set manu8=teredo.autotrans.consulintel.com.
  74. Set manu9=teredo.managemydedi.com.
  75. Set manu10=teredo.trex.fi.
  76. Set manu11=debian-miredo.progsoc.org.
  77. :Menu2
  78. cls
  79. echo 标题:「 %tle2% 」
  80. echo ---------------------------------------
  81. echo 菜单:
  82. echo       ①  %manu1%
  83. echo.
  84. echo       ②  %manu2%
  85. echo.
  86. echo       ③  %manu3%
  87. echo.
  88. echo       ④  %manu4%
  89. echo.
  90. echo       ⑤  %manu5%
  91. echo.
  92. echo       ⑥  %manu6%
  93. echo.
  94. echo       ⑦  %manu7%
  95. echo.
  96. echo       ⑧  %manu8%
  97. echo.
  98. echo       ⑨  %manu9%
  99. echo.
  100. echo       ⑩  %manu10%
  101. echo.
  102. echo       11 %manu11%
  103. echo.
  104. echo       B  返回主菜单
  105. echo.
  106. echo ---------------------------------------
  107. if %var2% neq 0 echo (输入无效请重新输入)
  108. Set choice2=
  109. Set /p choice2=选择:
  110. Set "choice2=%choice2:"=%"
  111. if "%choice2:~-1%"=="=" Goto Menu2
  112. if "%choice2%"=="" Goto Menu2
  113. if /i "%choice2%" == "1" cls&Goto TeredoSet
  114. if /i "%choice2%" == "2" cls&Goto TeredoSet
  115. if /i "%choice2%" == "3" cls&Goto TeredoSet
  116. if /i "%choice2%" == "4" cls&Goto TeredoSet
  117. if /i "%choice2%" == "5" cls&Goto TeredoSet
  118. if /i "%choice2%" == "6" cls&Goto TeredoSet
  119. if /i "%choice2%" == "7" cls&Goto TeredoSet
  120. if /i "%choice2%" == "8" cls&Goto TeredoSet
  121. if /i "%choice2%" == "9" cls&Goto TeredoSet
  122. if /i "%choice2%" == "10" cls&Goto TeredoSet
  123. if /i "%choice2%" == "11" cls&Goto TeredoSet
  124. if /i "%choice2%" == "b" cls&Goto Start
  125. if /i "%choice2%" == "q" Popd&Exit
  126. Set var2=1
  127. Goto Menu2
  128. :TeredoSet
  129. setlocal enabledelayedexpansion
  130. netsh interface teredo set state server=!manu%choice2%!
  131. endlocal
  132. Goto End
  133. :End
  134. if "%choice%" neq "" (
  135.     cls
  136.     Color 2e
  137.     MODE con: Cols=40 Lines=23
  138.     if "%choice%" neq "3" (
  139.         echo 操作完成 !!!
  140.         if exist %WINDIR%\System32\timeout.exe (timeout /t 2) else (if exist %WINDIR%\System32\choice.exe (choice /t 2 /d y /n >nul) else (ping 127.1 -n 2 >nul))
  141.     )
  142.     Goto Start
  143. )
复制代码

作者: Batcher    时间: 2018-10-25 20:50

把脚本重命名为 test.bat 能解决问题吗?
作者: joshatt    时间: 2018-10-26 19:20

回复 2# Batcher

试了一下, 一样的. 这次注意了, 五六个窗口循环闪动, 每个的内容都是"获取管理员权限...."




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2