在cmd中的@echo off

12

我正在尝试编写一个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

我的folders.txt文件包含数字“5”。

我的test.txt输出为:

ECHO is off
ECHO is off
5
我不理解为什么输出的前两行显示为“ECHO is off”,而第三行正确输出。如何输出正确的结果?
ETA:我尝试过以下代码:
echo 1>> %PROG_ROOT\test.txt
echo %ONE% >> %PROG_ROOT\test.txt

我能够打印输出

ECHO is off
1

然而,我需要在数字后面不打印尾随空格。

2个回答

7
1>(以及更一般的n>,对于任何数字n)被解释为重定向,因此echo 1>>对于cmd来说看起来像是没有参数的echo。没有参数的echo将打印当前echo状态(这里是ECHO is off)。要修复此问题,使用^字符转义整数:
echo ^1>> %PROG_ROOT\test.txt

1
或将重定向移到前面:>>%PROG_ROOT%\test.txt echo %ONE% - dbenham

0
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接