我很无聊所以我尝试编写简单的代码来生成一个文本文档,其中包含从1开始的数字列表并永远计算。这段代码在第一行显示“Echo is OFF”,第二行显示“10”,第三行显示“11”,依此类推。为什么它说“回声关闭”,为什么不从一开始算?感谢。
set number=0
echo %number%>numberlist.txt
goto countloop
:countloop
cls
echo The current number is %number%
set /a number=%number%+1
echo %number%>>numberlist.txt
goto countloop
答案 0 :(得分:2)
NICE :) 当%number%是0-9之前的>或>>它被解释为流号码。因此,当%number%为0时,您将回显到STDIN ...这相当于显示ECHO状态的ECHO。您不会开始回显该文件,直到%number%不是单个数字(不再被解释为流... STDIN,STDOUT,STDERR ......)。尝试这样做:
@echo off
set /a number=0
set MyFile=numberlist.txt
if exist "%MyFile%" del /y "%MyFile%"
:countloop
echo The current number is %number%
set /a number+=1
echo.%number%>>"%MyFile%"
goto countloop

由于这个原因......以及回声变量可能未定义的可能性我从不使用ECHO,后面跟一个空格。我总是使用ECHO(或ECHO。纯粹主义者更喜欢ECHO(但初学者往往会感到困惑,并认为有不匹配的parens。
答案 1 :(得分:1)
作为RGuggisberg said,单个数字数字被解释为表示文件句柄(或流),其中0表示标准输入,1标准输出,2个标准输出。和3-9 undefined。
echo.%number%>>%MyFile%
会起作用,但这不是一般解决方案。
像echo.Test %number%>>%MyFile%
这样的东西会像以前一样失败。
最简单的通用解决方案是在命令之前移动重定向。
>>%MyFile% echo %number%
其他选项是在命令周围添加括号:
(echo %number%)>>%MyFile%
或者逃避号码:
echo ^%number%>>%MyFile%