2013-02-07 280 views
-1

我想要做的是写一个批处理文件,当一个指定的答案时,会得到另一个点,并写一个批处理文件,然后将被调用运行。如果还有任何其他答案,它只是转到另一个点,并遵循一系列是/否的答案。批处理文件,写入另一个批处理文件

到目前为止我已经创建了两个批处理文件。一个只是教我如何使用set和if命令。另一个是针对上述问题。

这里有两个文本文件批次:

@echo off 
echo What is your first and last name? 
set /p answer 
if /i {%answer%}=={Tyler Zieske} (call tyler.bat) 

第二个文件(tyler.bat)

@echo off 
echo Are you from South Dakota? 
set /p answer=Yes or No (Y/N)? 
if /i {%answer%}=={y} (goto :yes) 
if /i {%answer%}=={yes} (goto :yes) 
goto :no 
:yes 
echo Your name must be Tyler Zieske 
pause 

:no 
echo Are you a child? 
set /p ans=Yes or No (Y/N)? 
if /i {%ans%}=={y} (goto :tyler) 
if /i {%ans%}=={yes} (goto :tyler) 
goto :zieske 
:tyler 
echo Your name must be Tyler Zieske 
pause 

:zieske 
echo You must not be Tyler Zieske 
pause 

编辑:

而是所有的麻烦,有什么如果我只是将原始批处理文件中的文本复制到新的批处理文件中?

+1

您还没有提出任何问题 – dbenham

+1

第二批文件可能只是您调用的第一批函数。你试图在这里模拟函数调用,还是你真的需要生成一个新的批处理文件(我认为是一个相当先进的主题)? – indiv

+0

以及我想要做的是,当“泰勒Zieske”键入,它将批处理文件放到计算机上。包含用于写入新批处理文件的命令的原始批处理文件将位于USB上 –

回答

0

你忘了问一个问题。

但我猜想,你的代码不能按预期工作。
您可以键入Tyler Zieske但goto失败。

其中一个问题是此行

if /i {%answer%}=={Tyler Zieske} (goto :call 
ffff 

没有闭合支架。
而且您应该将{%answer}更改为"%answer%",因为您的变体无法工作。 样品:如果回答的内容是abc那么exapnds到

if /i {Tyler}=={Tyler Zieske} (echo test) 

但失败了,因为有=={Tyler后一个空间,它被解释为命令,而不是作为比较字符串的一部分。

用引号将空格转义出来,因此仍然是比较字符串的一部分。

if /i "%answer%"=="Tyler Zieske" goto :myLabel 
+0

只需说明两个@echo offs是两个不同批处理文件的开头。而且我还没有问过一个问题,因为我不知道在转到之后要输入什么。此外,没有侮辱意图,但我知道(goto:电话)应该被关闭。我只是想让它变成这样:你的名字和姓氏是什么?当你回答从“a”到“alskdjf; alskdjf; aslkdjfa; slkdf”的任何答案到“任何名称”时,它将执行不同于指定答案的不同命令集,比如tyler zieske –

+1

但是'{%answer%}'会总是会导致语法错误,因为任何包含空格的答案都会破坏语法。顺便说一句。在你知道一个问题后你应该开个问题。 – jeb

+0

你是什么意思:“你应该在你知道一个问题后才开个问题?”那你的意思是应该调用另一个批处理文件来处理下一个问题吗?所以基本上你对'{%answer%}'所说的是它的工作原理,但为了与任何可变的答案一起工作,我应该把'%answer%'? –

相关问题