私は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
ただし、数字の後にスペースを印刷する必要はありません。
1>
(より一般的には、任意の数字のn>
n
)はリダイレクトとして解釈されるため、echo 1>>
はcmd
にecho
引数なし。引数なしのecho
は、現在のecho
状態を出力します(ここでは、ECHO is off
)。
修正するには、^
文字で整数をエスケープします。
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