Batch file :这是一个意外的时刻

Batch file :这是一个意外的时刻,batch-file,Batch File,我正在创建一个bat文件,它为服务器构建执行一些基本功能。该脚本被制作成具有一定的交互性。这允许我们在脚本上使用,用于生产、开发或QA。失败的脚本区域如下所示 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

我正在创建一个bat文件,它为服务器构建执行一些基本功能。该脚本被制作成具有一定的交互性。这允许我们在脚本上使用,用于生产、开发或QA。失败的脚本区域如下所示

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)
一旦提示我“选择一个:”我选择其中一个选项,然后得到错误:

:此时出现意外情况。

从脚本顶部删除
@echo off
echo off
命令(或添加
echo on
),并使用结果输出调试导致错误的行


出于优化目的,请将
if errorlevel
命令按降序排列。
if errorlevel
命令在
errorlevel
是指定的数字或更高时触发
if errorlevel
我意识到这是一个迟到的答案,但我刚刚经历了完全相同的错误消息,尽管是“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): "

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

对我来说不会失败。我想这只是脚本的一个子集,因为我希望在脚本的第一行出现“回音关闭”。这个脚本本身对我来说是有效的。errorlevel之后是什么?脚本的其余部分如下:Nvm。我注意到问题出在哪里,但有时它似乎起作用,但其他时候它不会改变
if errorlevel
顺序,除非您添加
else
s,否则将破坏此脚本。我也看到了出错的行,但奇怪的是,它有时起作用,有时不起作用在不更改任何其他内容的情况下,所有语句仍将执行,但这次输出将始终为1,因为3和2大于等于1,1将是最后一个检查的数字。我也看到了这种行为。特别是关于环境路径中的变量:cmd不喜欢路径中带有空格,尽管对于各种应用程序(例如C:\Program Files\…)有很多这样的例子。将路径括在双引号内通常是一种很好的做法。