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.
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
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