批量循环/输出问题

时间:2015-02-07 01:19:17

标签: loops batch-file count output echo

我很无聊所以我尝试编写简单的代码来生成一个文本文档,其中包含从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

2 个答案:

答案 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%