web-dev-qa-db-fra.com

@echo off en cmd

J'essaie d'écrire un script BAT et j'ai les éléments suivants:

@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

Mon dossier.txt contient le numéro "5".

Ma sortie test.txt est

ECHO is off
ECHO is off
5

Je ne comprends pas pourquoi les deux premières lignes de sortie ont "ECHO est désactivé", alors que la troisième ligne est imprimée correctement Comment imprimer le bon résultat?

ETA: j'ai essayé

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

et j'ai pu imprimer

ECHO is off
1

Cependant, je n'ai pas besoin d'imprimer l'espace de fin après le nombre.

8
Rayne

1> (et plus généralement n> pour tout chiffre n) est interprété comme une redirection, et donc echo 1>> apparaît à cmd comme echo sans arguments. echo sans arguments affichera l’état actuel echo (ici, ECHO is off).

Pour résoudre ce problème, échappez l'entier avec un caractère ^:

echo ^1>> %PROG_ROOT\test.txt
6
nneonneo
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
0
Nguyễn Lợi