Windows @在cmd中回声消失

Windows @在cmd中回声消失,windows,cmd,echo,Windows,Cmd,Echo,我正在尝试编写一个BAT脚本,我有以下几点: @echo off REM Comments here SETLOCAL ENABLEDELAYEDEXPANSION set PROG_ROOT=C:\Prog set ONE=1 echo 1>> %PROG_ROOT\test.txt echo %ONE%>> %PROG_ROOT\test.txt for /f "tokens=*" %%f in (folders.txt) do ( echo %%f>

我正在尝试编写一个BAT脚本,我有以下几点:

@echo off
REM Comments here
SETLOCAL ENABLEDELAYEDEXPANSION
set PROG_ROOT=C:\Prog
set ONE=1

echo 1>> %PROG_ROOT\test.txt
echo %ONE%>> %PROG_ROOT\test.txt

for /f "tokens=*" %%f in (folders.txt) do (
    echo %%f>> %PROG_ROOT\test.txt
)

ENDLOCAL
My folders.txt包含数字“5”

我的test.txt输出是

ECHO is off
ECHO is off
5
我不明白为什么输出的前两行显示“ECHO is off”,而第三行打印正确。如何打印正确的输出

埃塔:我试过了

echo 1>> %PROG_ROOT\test.txt
echo %ONE% >> %PROG_ROOT\test.txt
我能打印出来

ECHO is off
1
但是,我不需要打印数字后的尾随空格。

1>
(更一般地说,任何数字的
n
)都被解释为重定向,因此
echo 1>
显示为
cmd
无参数的
echo
echo
不带参数将打印当前的
echo
状态(此处,
echo处于关闭状态

要修复此问题,请使用
^
字符转义整数:

echo ^1>> %PROG_ROOT\test.txt

或者将重定向移动到前端:
>%PROG\u ROOT%\test.txt echo%ONE%
echo 1>> %PROG_ROOT\test.txt
echo %ONE%>> %PROG_ROOT\test.txt

for /f "tokens=*" %%f in (folders.txt) do (
    echo %%f>> %PROG_ROOT\test.txt
)

ENDLOCAL