[英]goto was not expected at this time batch
@echo off
:start
set string=
set lo=1
set a=0
set b=0
set cl=1
set cloop=
set google=0
set k=0
set r=0
set id=
set t=0
set f=0
set /p string=?
if defined string (
echo %string%
goto loop
) else (
echo please enter a string
goto start
)
:loop
set a=
for /f "tokens=%lo%" %%G IN ("%string%") DO echo %%G
if defined a (
echo %a%
set google=0
set /p cloop=<greetings.txt
pause
:cloop
set b=
for /f "tokens=%cl%" %%g IN ("%cloop%") DO set b=%%g
if defined string (
if %a%==%b% goto greetings
set /a cl=%cl%+1
goto cloop
) else (
set cl=0
set /a lo=%lo%+1
goto loop
)
) else (
goto google
)
:greetings
set f=0
set k=0
set r=0
set /p id=<greetingtone.dat
for /f "tokens=%cl%" %%g IN ("%id%") DO set t=%%g
start greeting.bat
call greeting.bat
goto talk
:google
echo not done yet
pause
goto start
如果我删除它时%a%==%b%进入问候语,我将其范围缩小到了这一行
我看过了,但我不知道为什么它不起作用, 请帮助 greetings.txt发出“嗨你好咕“声”,我认为这可能是变量
如果%a%
或%b%
为空值,则可能是比较未完成,并且表示尚未实现goto
。 例如,如果在C:\\
提示符下键入以下内容:
c:\>if a== echo ok
c:\>if ==a echo ok
echo was unexpected at this time.
c:\>if == echo ok
ok was unexpected at this time.
c:\>
如果将每个值都用引号引起来,则即使其中一个或两个值都为空,比较仍然可以进行。 例如:
if "%a%"=="%b%" goto greetings
在IF
语句中出现意外单词的正常原因是IF
具有非常特定的语法,即IF item1 operator item2 actionstatement(s)
。
可能发生的情况是item1 和 item2似乎丢失了,因此IF
将其解析为IF == goto greetings
。 由于goto
不是其已知的operators
( ==
, equ
, neq
, leq
, lss
, geq
,gtr`),因此会抱怨。
这里的问题是-为什么%a%
和%b%
似乎为空?
在块语句(a parenthesised series of statements)
,将分析整个块然后执行。 解析该块时-执行该块之前,该块中的任何%var%
都将由该变量的值替换。
因此,将在遇到IF
时使用%variables%
的值执行IF (something) else (somethingelse)
。 在您的情况下,这表示最外的IF
if defined string
。
解决此问题的两种常用方法是:1)使用setlocal enabledelayedexpansion
和使用!var!
代替%var%
访问的改变值var
或2),以调用一个子程序使用改变的值来执行进一步的处理。
下一个问题是在块中使用标签。 这不是一个好主意。 在某些版本中,标签会终止该块。 而是调用子例程。
call :cloop
...
goto start
:cloop
(whatever needs to be done)
goto :eof
(请注意:cloop
和:EOF
具有必需的冒号。在cloop
上表示“这是一个内部子例程-位于当前批处理文件中。” :EOF
是CMD
理解end of file
预定义标签。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.