批量 loop/output 问题
Batch loop/output issue
我很无聊,所以我尝试编写简单的代码来生成一个文本文档,其中包含从 1 开始并永远计数的数字列表。此代码在第一行表示 "Echo is OFF",在第二行表示“10”,在第三行表示“11”,依此类推。为什么它说 "echo is off" 并且它为什么不从一开始计数?谢谢
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
不错 :)
当 %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 后跟 space。我总是使用 ECHO( 或 ECHO。纯粹主义者更喜欢 ECHO( 但初学者往往会感到困惑,并认为存在不匹配的括号。
与一样,单个数字被解释为表示文件句柄(或流),其中 0 是标准输入,1 是标准输出,2 是标准错误。和 3-9 未定义。
echo.%number%>>%MyFile%
会起作用,但这不是通用的解决方案。
类似 echo.Test %number%>>%MyFile%
的方法会像以前一样失败。
最简单的通用解决方案是将重定向移到命令之前。
>>%MyFile% echo %number%
其他选项是在命令两边加上括号:
(echo %number%)>>%MyFile%
或转义数:
echo ^%number%>>%MyFile%
我很无聊,所以我尝试编写简单的代码来生成一个文本文档,其中包含从 1 开始并永远计数的数字列表。此代码在第一行表示 "Echo is OFF",在第二行表示“10”,在第三行表示“11”,依此类推。为什么它说 "echo is off" 并且它为什么不从一开始计数?谢谢
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
不错 :) 当 %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 后跟 space。我总是使用 ECHO( 或 ECHO。纯粹主义者更喜欢 ECHO( 但初学者往往会感到困惑,并认为存在不匹配的括号。
与
echo.%number%>>%MyFile%
会起作用,但这不是通用的解决方案。
类似 echo.Test %number%>>%MyFile%
的方法会像以前一样失败。
最简单的通用解决方案是将重定向移到命令之前。
>>%MyFile% echo %number%
其他选项是在命令两边加上括号:
(echo %number%)>>%MyFile%
或转义数:
echo ^%number%>>%MyFile%