标题: [文本处理] goto语句再调用goto遇到的问题 [打印本页]
作者: hjfeng1988 时间: 2011-10-17 15:56 标题: goto语句再调用goto遇到的问题
本帖最后由 hjfeng1988 于 2011-10-17 20:09 编辑
代码还没写完,运行环境XP下,没有C:\WINDOWS\system32\inetsrv\appcmd,脚本同目录下放个a.txt文件。
选择2后,按Y。为什么会卡在那边呢。
还有经常会碰到某脚本会调用同目录下有其他的脚本,但其脚本根本就没写到调用的语句。
各位大大,求解- ::code by hjfeng #2011-10-17
- @echo off
- set path=%path%;C:\WINDOWS\system32\inetsrv
- set logfile=app%date:~0,4%%date:~5,2%%date:~8,2%.log
- setlocal EnableDelayedExpansion
-
-
- :main
- color 17
- title IIS站点批量管理
- echo ***************************************************************************
- echo.
- echo 本程序将为IIS7.0添加,更改,删除站点.
- echo.
- echo 1.添加IIS站点
- echo 2.更改IIS站点
- echo 3.删除IIS站点
- echo 退出请输入exit
- echo.
- echo.
- echo.
- echo 例:域名abc.cn
- echo 添加站点:以abc.cn为网站名称新建站点,只绑定abc.baidu.com
- echo 更改站点:更改绑定域名,包含abc.cn www.abc.cn abc.baidu.com
- echo 删除站点:删除以abc.cn为网站名称的站点,不删除文件目录
- echo.
- echo ***************************************************************************
- echo.
- set choice=
- set /p choice=请选择操作:(1/2/3),然后按回车:
- if /I "%choice%"=="1" goto 1
- if /I "%choice%"=="2" goto 2
- if /I "%choice%"=="3" goto 3
- if /I "%choice%"=="exit" goto exit else (
- set /p error=输入有误请重新选择..
- cls
- goto main
- )
-
-
- :2
- ::更改IIS站点
- cls
- color 37
- title 绑定iis站点
- echo ===========================================================================
- echo.
- echo 以同目录下a.txt中的域名为站点名称,绑定这些站点。
- echo.
- echo 请将域名每行放置一个,并确保所要绑定的站点无误。
- echo.
- echo ===========================================================================
- set choice=
- set /p choice=你确定要执行操作?(Y/N):
- if "%choice%"=="Y" goto 5
- if "%choice%"=="N" goto 7 else (
- set /p error=输入有误,区分大小写,请重新选择..
- cls
- goto main
- )
- pause>nul
- exit
-
-
- :5
- ::绑定IIS站点
- echo 为同目录下a.txt中的域名站点绑定站点,请稍候...
- echo ****************************>> %logfile%
- echo **********%time:~0,8%**********>> %logfile%
- for /f "delims=." %%i in (a.txt) do (
- set var=%%i
- set hname1=!var!.cn
- set hname2=www.!var!.cn
- set hname3=!var!.baidu.com
- appcmd list site !hname1! >nul 2>&1
- if !errorlevel! == 0 (
- 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
- echo 站点!hname1!绑定成功.>> %logfile% 2>>&1
- ) else (
- echo 站点!hname1!不存在.>> %logfile% 2>>&1
- )
- )
- echo 站点绑定完毕,请查看同目录下的%logfile%了解详情,按任意键退出程序。
- pause>nul
- exit
-
-
- :7
- exit
复制代码
作者: powerbat 时间: 2011-10-17 17:41
谁叫你在pause后面都加了>nul
另外你的if...else...都写错了,if后面的语句应该加括号:if 1==1 (do1) else do2
要调试代码,请把@echo off去掉,且最好新开一个CMD,输入脚本名字运行。把所有的exit都改成exit/b。
作者: hjfeng1988 时间: 2011-10-17 20:26
回复 2# powerbat
按你所说的改了也没用,一样的结果。貌似是appcmd这个命令跟cmd命令相似造成xp下不能正常运行;在win7上面测试过可以正常跑。
可以将上面中的- for /f "delims=." %%i in (a.txt) do (
- set var=%%i
- set hname1=!var!.cn
- set hname2=www.!var!.cn
- set hname3=!var!.baidu.com
- appcmd list site !hname1! >nul 2>&1
- if !errorlevel! == 0 (
- 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
- echo 站点!hname1!绑定成功.>> %logfile% 2>>&1
- ) else (
- echo 站点!hname1!不存在.>> %logfile% 2>>&1
- )
- )
复制代码
改为:- for /f "delims=." %%i in (a.txt) do (
- set var=%%i
- set hname1=!var!.cn
- set hname2=www.!var!.cn
- set hname3=!var!.baidu.com
- appcmd
- )
复制代码
运行后就会发现一直在循环,在此想问下各位大大,我的猜想是否是正确的,appcmd命令被解释器认为是cmd。
作者: powerbat 时间: 2011-10-17 20:51
你的批处理名字是appcmd.bat吧?一个很普遍的低级错误,很多人都犯过。
作者: hjfeng1988 时间: 2011-10-17 21:36
回复 4# powerbat
我的天。。
谢谢powerbat,以及各位朋友。
原因:
原批处理文件被我命名为appcmd.bat,导致命令循环调用批处理文件。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |