2012-09-20 42 views
8

我试图写一个BAT剧本,我有以下几点:在DOS(CMD)关闭@echo

@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 

我不理解为什么第一2线输出的已“ECHO是关断”,而第三线路被正确地打印出来。如何打印正确的输出?

ETA:我试过

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

,我能够打印

ECHO is off 
1 

不过,我需要的号码后不打印尾部空间。

回答

6

1>(并且更一般地为n>任何数字n)被解释为重定向,因此echo 1>>似乎cmd作为echo没有参数。不带参数的echo将打印当前的echo状态(这里是ECHO is off)。

要解决,逃避整数与^字符:

echo ^1>> %PROG_ROOT\test.txt 
+0

这就是它!谢谢! – Rayne

+1

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