设置/ p%foo%没有按预期运行

时间:2015-07-09 17:03:33

标签: batch-file cmd environment-variables

我的代码有问题。我正在努力制作一个"黑客工具"使用tree命令。这是我的代码:

@echo off
title $userOne ProxyMatrix
color a
echo Hello $userOne,
echo Please enter search function for today's commands:
set /p %commands%=""
:redo
echo Specify Storage Device
set /p %drive%=""
title $userOne ProxyMatrix: Running on %drive% drive at %random% bits per nano
color C
tree %drive% /f
:runagain
color a
echo Run again?
set /p %redo%=""
if %redo%="yes" goto redo
else if %redo%="y" goto redo
else if %redo%="Y" goto redo
else if %redo%="Yes" goto redo
else if %redo%="no" goto end
else if %redo%="No" goto end
else if %redo%="n" goto end
else if %redo%="N" goto end
else echo Thats not a valid answer!
pause
goto runagain
:end
echo Thank you for choosing InGen, inc.
pause

我意识到这不会成为" hack"什么,更多的是新奇。问题是,set /p %redo%和if / else if语句不起作用。他们只是退出了该计划。有人可以解释我做错了什么吗?感谢。

1 个答案:

答案 0 :(得分:1)

语法为set /p variable=prompt

而不是set /p %redo%=""set /p redo=""或更好set /p "redo="

修改

您的if语法也被破坏了。

语法为:if value1==value2 commandif value1==value2 (command1) else (command2)

“最佳做法是将比较的两边都用引号括起来(以避免使用空值或包含空格的语法错误):

if "%variable"=="value" echo yes

我会将代码缩短为:

set /p %redo%=""
if /i "%redo:~0,1%"=="y" goto redo
if /i "%redo:~0,1%"=="n" goto end
else echo Thats not a valid answer!

/i告诉if忽略大小写

%variable:~0,1%表示“从第一个字母开始的子字符串(从0开始计数),长度= 1(因此需要第一个字母)

(不需要else