2011-03-22 103 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