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

[文本处理] goto语句再调用goto遇到的问题

本帖最后由 hjfeng1988 于 2011-10-17 20:09 编辑

代码还没写完,运行环境XP下,没有C:\WINDOWS\system32\inetsrv\appcmd,脚本同目录下放个a.txt文件。
选择2后,按Y。为什么会卡在那边呢。
还有经常会碰到某脚本会调用同目录下有其他的脚本,但其脚本根本就没写到调用的语句。
各位大大,求解
  1. ::code by hjfeng #2011-10-17
  2. @echo off
  3. set path=%path%;C:\WINDOWS\system32\inetsrv
  4. set logfile=app%date:~0,4%%date:~5,2%%date:~8,2%.log
  5. setlocal EnableDelayedExpansion
  6. :main
  7. color 17
  8. title IIS站点批量管理
  9. echo ***************************************************************************
  10. echo.
  11. echo    本程序将为IIS7.0添加,更改,删除站点.
  12. echo.
  13. echo    1.添加IIS站点
  14. echo    2.更改IIS站点
  15. echo    3.删除IIS站点
  16. echo    退出请输入exit
  17. echo.
  18. echo.
  19. echo.
  20. echo 例:域名abc.cn
  21. echo    添加站点:以abc.cn为网站名称新建站点,只绑定abc.baidu.com
  22. echo    更改站点:更改绑定域名,包含abc.cn  www.abc.cn  abc.baidu.com
  23. echo    删除站点:删除以abc.cn为网站名称的站点,不删除文件目录
  24. echo.
  25. echo ***************************************************************************
  26. echo.
  27. set choice=
  28. set /p choice=请选择操作:(1/2/3),然后按回车:
  29. if /I "%choice%"=="1" goto 1
  30. if /I "%choice%"=="2" goto 2
  31. if /I "%choice%"=="3" goto 3
  32. if /I "%choice%"=="exit" goto exit else (
  33. set /p error=输入有误请重新选择..
  34. cls
  35. goto main
  36. )
  37. :2
  38. ::更改IIS站点
  39. cls
  40. color 37
  41. title 绑定iis站点
  42. echo ===========================================================================
  43. echo.
  44. echo    以同目录下a.txt中的域名为站点名称,绑定这些站点。
  45. echo.
  46. echo    请将域名每行放置一个,并确保所要绑定的站点无误。
  47. echo.
  48. echo ===========================================================================
  49. set choice=
  50. set /p choice=你确定要执行操作?(Y/N):
  51. if "%choice%"=="Y" goto 5
  52. if "%choice%"=="N" goto 7 else (
  53. set /p error=输入有误,区分大小写,请重新选择..
  54. cls
  55. goto main
  56. )
  57. pause>nul
  58. exit
  59. :5
  60. ::绑定IIS站点
  61. echo 为同目录下a.txt中的域名站点绑定站点,请稍候...
  62. echo ****************************>> %logfile%
  63. echo **********%time:~0,8%**********>> %logfile%
  64. for /f "delims=." %%i in (a.txt) do (
  65. set var=%%i
  66. set hname1=!var!.cn
  67. set hname2=www.!var!.cn
  68. set hname3=!var!.baidu.com
  69. appcmd list site !hname1! >nul 2>&1
  70. if !errorlevel! == 0 (
  71. appcmd set site !hname1! /bindings:http/125.77.197.154:80:!hname1!,http/125.77.197.154:80:!hname2!,http/125.77.197.144:80:!hname3!>> %logfile% 2>>&1
  72. echo 站点!hname1!绑定成功.>> %logfile% 2>>&1
  73. ) else (
  74. echo 站点!hname1!不存在.>> %logfile% 2>>&1
  75. )
  76. )
  77. echo 站点绑定完毕,请查看同目录下的%logfile%了解详情,按任意键退出程序。
  78. pause>nul
  79. exit
  80. :7
  81. exit
复制代码

谁叫你在pause后面都加了>nul
另外你的if...else...都写错了,if后面的语句应该加括号:if 1==1 (do1) else do2

要调试代码,请把@echo off去掉,且最好新开一个CMD,输入脚本名字运行。把所有的exit都改成exit/b。

TOP

回复 2# powerbat


    按你所说的改了也没用,一样的结果。貌似是appcmd这个命令跟cmd命令相似造成xp下不能正常运行;在win7上面测试过可以正常跑。
可以将上面中的
  1. for /f "delims=." %%i in (a.txt) do (
  2.         set var=%%i
  3.         set hname1=!var!.cn
  4.         set hname2=www.!var!.cn
  5.         set hname3=!var!.baidu.com
  6.         appcmd list site !hname1! >nul 2>&1
  7.         if !errorlevel! == 0 (
  8.                 appcmd set site !hname1! /bindings:http/125.77.197.154:80:!hname1!,http/125.77.197.154:80:!hname2!,http/125.77.197.144:80:!hname3!>> %logfile% 2>>&1
  9.                 echo 站点!hname1!绑定成功.>> %logfile% 2>>&1
  10.                 ) else (
  11.                 echo 站点!hname1!不存在.>> %logfile% 2>>&1
  12.                 )
  13. )
复制代码
改为:
  1. for /f "delims=." %%i in (a.txt) do (
  2.         set var=%%i
  3.         set hname1=!var!.cn
  4.         set hname2=www.!var!.cn
  5.         set hname3=!var!.baidu.com
  6.         appcmd
  7. )
复制代码
运行后就会发现一直在循环,在此想问下各位大大,我的猜想是否是正确的,appcmd命令被解释器认为是cmd。

TOP

你的批处理名字是appcmd.bat吧?一个很普遍的低级错误,很多人都犯过。

TOP

回复 4# powerbat


    我的天。。
谢谢powerbat,以及各位朋友。
原因:
原批处理文件被我命名为appcmd.bat,导致命令循环调用批处理文件。

TOP

返回列表