0

なぜ「ECHO is off」がここに現れてすべてを台無しにするのか?

ソースコード:

set authfile=\\COMPUTER\Users\username\auth.txt
echo Authentication file not detected.
echo.
echo Press enter to generate a new one...
pause > nul
echo 4.7>"%authfile%"
echo 0>>"%authfile%"
echo sigh>>"%authfile%"
echo 0>>"%authfile%"
echo 0>>"%authfile%"
echo 0>>"%authfile%"
echo 0>>"%authfile%"
echo 0>>"%authfile%"
if exist "%authfile%" goto success
goto failure

出力:

Authentication file not detected.

Press enter to generate a new one...
ECHO is off.
ECHO is off.
ECHO is off.
ECHO is off.
ECHO is off.
ECHO is off.

auth.txt:

4.7
sigh

はい、これらのすべての 0 は、正しい順序と場所で出力する必要があります。

4

3 に答える 3

4

0>>ファイル記述子 0 (つまり、STDIN) を出力ファイルにリダイレクトしようとしていることを意味します。Endoroが提案したように、行の先頭にリダイレクトを配置します。

>>"%authfile%" echo 0

または数字をエスケープします。

echo ^0>>"%authfile%"
于 2013-08-11T11:53:43.380 に答える
3

6 つの「ECHO is off」メッセージの原因は、次の行を書いているためです。

echo 0>>"%authfile%"

このステートメントの正しい形式は次のとおりです (「0」と「>>」の間のスペースに注意してください):

echo 0 >>"%authfile%"

技術解説

エラーは、DOS バッチ言語のリダイレクト構文にあります。それぞれ番号 1 または 2 を使用して、出力をstdoutまたはstderrにリダイレクトできます。

echo Hi! 1>"%authfile%"
echo Hi! 2>"%authfile%"

ケースでスペースを省略したため、DOS は「0」をリダイレクト番号として解析しました。0 はstdinに対応します。stdinへのパイピングは意味がないため、DOS バッチ パーサーはパイピングを無視し、次のような結果を残しました。

echo

「。」なし エコーの後、「ECHO is off.」というメッセージが表示されます。

于 2013-08-11T11:48:42.963 に答える