2012-09-20 15 views
8

Sto cercando di scrivere uno script BAT e ho la seguente:@echo off in DOS (cmd)

@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 

mio folders.txt contiene il numero "5".

La mia uscita test.txt è

ECHO is off 
ECHO is off 
5 

Non capisco il motivo per cui le prime 2 linee di uscita è "ECHO è spento", mentre la terza linea viene stampato in modo corretto. Come posso stampare l'output corretto?

ETA: ho provato

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

e sono stato in grado di stampare

ECHO is off 
1 

Tuttavia, ho bisogno di non stampare lo spazio finale dopo il numero.

risposta

6

1> (e più in generale per qualsiasi n> cifre n) viene interpretato come un reindirizzamento, e quindi echo 1>> sembra cmd come echo senza argomenti. echo senza argomenti stamperà lo stato corrente echo (qui, ECHO is off).

Per risolvere, sfuggire il numero intero con un carattere ^:

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

Questo è tutto! Grazie! – Rayne

+1

Oppure sposta il reindirizzamento in primo piano: '>>% PROG_ROOT% \ test.txt echo% ONE%' – dbenham