2012-09-20 12 views
8

Próbuję napisać skrypt bat i mam następujące:@echo off w 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 

Moja folders.txt zawiera liczbę "5".

moje wyjście test.txt jest

ECHO is off 
ECHO is off 
5 

Nie rozumiem, dlaczego pierwsze 2 linie wyjścia jest „echo jest wyłączone”, zaś trzecia linia jest drukowana poprawnie. Jak wydrukować prawidłowe wyniki?

ETA: Próbowałem

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

i udało mi się wydrukować

ECHO is off 
1 

Jednak muszę NIE wydrukować spacją po numerze.

Odpowiedz

6

1> (i bardziej ogólnie n> dla każdej cyfry n) interpretowane jest jako przekierowania, a więc wydaje się cmdecho 1>> jako echo bez argumentów. echo bez argumentów wypisze bieżący stan echo (tutaj, ECHO is off).

Aby ustalić, ucieczka liczbę całkowitą z ^ charakteru:

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

To jest to! Dziękuję Ci! – Rayne

+1

Lub przenieś przekierowanie do przodu: '>>% PROG_ROOT% \ test.txt echo% ONE%' – dbenham