找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20078|回复: 4

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

[复制链接]
发表于 2011-10-17 15:56:11 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
发表于 2011-10-17 17:41:27 | 显示全部楼层
谁叫你在pause后面都加了>nul
另外你的if...else...都写错了,if后面的语句应该加括号:if 1==1 (do1) else do2

要调试代码,请把@echo off去掉,且最好新开一个CMD,输入脚本名字运行。把所有的exit都改成exit/b。
 楼主| 发表于 2011-10-17 20:26:05 | 显示全部楼层
回复 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。
发表于 2011-10-17 20:51:46 | 显示全部楼层
你的批处理名字是appcmd.bat吧?一个很普遍的低级错误,很多人都犯过。
 楼主| 发表于 2011-10-17 21:36:48 | 显示全部楼层
回复 4# powerbat


    我的天。。
谢谢powerbat,以及各位朋友。
原因:
原批处理文件被我命名为appcmd.bat,导致命令循环调用批处理文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:12 , Processed in 0.018887 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表