这个批处理脚本有什么问题

时间:2015-01-02 08:38:46

标签: batch-file

我开始进入编程并且最近学习了批处理脚本的基础知识。我正在做一些私密的事情,但每当我尝试使用我输入“set / p”的输入时,它就会退出批处理。 我想知道它是否有问题

set /p msg=
if %msg%== y goto :y1
if %msg%== n goto c1
:y1
cls
color 0a

之前和之后只有“echo”和文字

提前致谢

4 个答案:

答案 0 :(得分:0)

比较时,您应该在项目周围使用引号,例如:

if "%msg%" == "y"

答案 1 :(得分:0)

现在不在我的电脑上,而是要检查/尝试四件事。

  1. 使用IF /i即使您输入CAPS也能正常工作。 (http://ss64.com/nt/if.html

  2. 正如thebjorn所说,它很好地利用变量和值周围的“”。

  3. 您的示例看起来可能在%msg%

  4. 之后缺少空格
  5. 基于您所包含的代码的最可能的问题是Stephen所说的......在示例代码中,一旦到达:y1标签就会清除屏幕,设置颜色然后超级快速地回显并退出。 尝试暂停技巧。

答案 2 :(得分:0)

set /p msg=
if %msg%== y goto :y1
if %msg%== n goto :c1
:y1
cls
color 0a

我相信你的错误将是你的开始。如果您有set /p msg=,那么%msg%等于什么,如果您的批处理程序以错误开始,那么它将立即关闭。 你可以让它等于你想要的任何东西,例如,如果你希望它是空白的,你必须拥有:set /p msg=" ",并且在命令提示符中它只会将你的光标移到空白行等待你的输入。

最标准的选项是命令提示符用于指示新行:set /p msg=" > "

我为你编辑了代码,你可以根据自己的意愿改变它......我清理了它对你来说有点像什么

@echo off

echo input y or n
echo.
set /p "msg= > "
if "%msg%"=="y" goto :y1
if "%msg%"=="n" goto :c1
:y1
cls
color 0a
pause

修改1:修复了上述代码中的引号...原始放置不会对上面的内容做很多事情但是附加代码可能会导致问题,当它来到引号和空格批次有点挑剔

旁注1:如果您希望暂停时间而不是等待按钮按下时暂停,可以使用命令timeout /t ##将是您希望它等待的秒数,您也可以按任意按钮使其像暂停按钮一样......现在就像暂停按钮的方式一样"按任意键继续......&#34 ;短语因此超时它有这样的东西,但不引用我这个"按任意键继续或等待#..."您可以使用以下任一代码行隐藏短语:pause >nultimeout /t # >nul

答案 3 :(得分:0)

感谢您的回答,但我已经明白了。 我尝试了不同的改变然后我终于得到了它

我只需要将GOTO资本化

@echo off
@echo [question] [message] y/n?
set /p msg=
if %msg%== y GOTO :y1
if %msg%== n GOTO c1
:y1
cls
color 0a