2011-03-22 74 views
0

我正在创建一个bat文件,为服务器构建做一些基本的功能。这个脚本有点互动。这使我们可以在生产,开发或质量保证的脚本上使用。失败脚本的面积低于:在这个时候出乎意料

echo Enter User-defined Information about this Server: 
echo Environment: 
echo 1. PROD  
echo 2. QA 
echo 3. Dev 
echo Choose one: 
CHOICE /C 123 
if errorlevel 1 (set ENVIRONMENTNAME=PROD & set ENVNAME=Production) 
if errorlevel 2 (set ENVIRONMENTNAME=QA & set ENVNAME=Acceptance) 
if errorlevel 3 (set ENVIRONMENTNAME=Dev & set ENVNAME=Development) 

一旦我提示“选择一个:”我选择任一选项,然后得到错误:
:在这个时候意外。

+1

对我来说不会失败。我想这只是该脚本的一个子集,因为我期望在脚本的第一行有一个“回声消除”。 – JoDG 2011-03-22 13:27:34

+0

该脚本本身适合我。错误级别后面是什么? – Blorgbeard 2011-03-22 13:28:39

+0

脚本的其余部分如下: – 2011-03-22 13:36:17

回答

2

从脚本的顶部删除@echo offecho off命令(或添加echo on),并使用生成的输出来调试哪条线路会导致有问题的错误。

为了优化目的,请将您的if errorlevel命令按降序排列。 if errorlevel命令在ERRORLEVEL是指定的数字或更高时触发。

+0

颠倒'if errorlevel'命令将会破坏这个脚本,除非你添加了'else's – Blorgbeard 2011-03-22 13:38:28

+0

我看到错误出现但有点奇怪,有时它有效,有时它不行。 – 2011-03-22 13:43:14

+0

@Blorgbeard,为什么会出错? – 2011-03-23 18:53:21

0

我意识到这是一个相当迟钝的答案,但我刚刚经历了完全相同的错误消息,虽然它是一个“set/p”导致我的问题。该行在最初:

set /p Option=Do you want to go ahead and load the data? ([Y]/N): 

,我找到了解决办法是把周围的提示文本双引号,所以:

set /p Option="Do you want to go ahead and load the data? ([Y]/N): " 

不知道这是否会帮助任何人或不是,但它为我解决了这个问题:-)

+0

我也看到了这种行为。特别是关于环境路径中的变量:cmd不喜欢其中有空格的路径,尽管有很多这样的例子用于各种应用程序(例如C:\ Program Files \ ...)。用双引号括住路径通常是一种好的做法。 – thoroc 2015-09-03 14:03:15