web-dev-qa-db-ja.com

コマンドで@echo off

私はBATスクリプトを書き込もうとしていますが、次のものがあります。

@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がオフ」と表示されているのに、3行目が正しく出力されるのはなぜですか。正しい出力を印刷するにはどうすればよいですか?

ETA:私が試した

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

と私は印刷することができました

ECHO is off
1

ただし、数字の後にスペースを印刷する必要はありません。

11
Rayne

1>(より一般的には、任意の数字のn>n)はリダイレクトとして解釈されるため、echo 1>>cmdecho引数なし。引数なしのechoは、現在のecho状態を出力します(ここでは、ECHO is off)。

修正するには、^文字で整数をエスケープします。

echo ^1>> %PROG_ROOT\test.txt
7
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