如何解决 ECHO 已关闭。 (批次,蝙蝠)

How to solve ECHO is off. (batch, bat)

我是批处理新手。我试图将此回显到 txt,但我得到:ECHO 已关闭。在命令中。

SET /a _rand=(%RANDOM%*5/32768)+1
Set /a zmienna=%zmienna%-%_rand%
set kurczaki=%zmienna%
echo %kurczaki%> bin\DB\smth.txt

我尝试将 "zmienna" 更改为其他变量,但我仍然遇到同样的问题。预先感谢您的帮助。

如果您只是 运行 echo 而没有操作数,您会收到 ECHO is off/on 消息。这意味着,出于某种原因,您的 kurczaki 变量未设置为任何值。因此,您应该在设置每个变量后回显它以查看问题所在:

SET /a _rand=(%RANDOM%*5/32768)+1
echo .%_rand%.
Set /a zmienna=%zmienna%-%_rand%
echo .%zmienna%.
set kurczaki=%zmienna%
echo .%kurczaki%.
echo %kurczaki%> bin\DB\smth.txt

当我从命令行执行此操作时,当 > 重定向与您正在输出的内容不一致时,当那个东西可以用作文件句柄时会有所不同:

C:\Pax> set xx=7
C:\Pax> echo %xx%>zz.txt
ECHO is on.
C:\Pax> type zz.txt
<no output>
C:\Pax> echo %xx% >zz.txt
C:\Pax> type zz.txt
7<space>

所以我认为您的解决方案就是不这样做。在这种情况下发生的是 echo %xx%>zz.txt 完全 转换为:

echo 7>zz.txt

不是7发送到文件。相反,它将文件句柄 7 附加到该文件,然后,因为您的 echo 仅写入文件句柄 1 (标准输出),所以文件中没有任何内容。

此外,由于 %xx% 已被重定向吸收,不再有任何回显参数,因此您会收到 ECHO is off 消息。可以通过以下方式找到进一步的证据:

C:\Pax> set xx=1 7
C:\Pax> echo %xx%
1 7
C:\Pax> echo %xx%>zz.txt
1

7 被重定向吸收,只留下 1

但请注意,如果您不以某种方式进行操作,空格通常会进入输出。为此,我会将行更改为:

echo>bin\DB\smth.txt %kurczaki%

这应该确保输出文件中的变量周围没有空格,以及实际 写入 值到所述文件。

您的问题可能是因为您的结果也可能被混淆为重定向句柄,即(1>2> 等)。这可以通过您 echo 的方式轻松解决。

您还可以将四行代码简化为两行:

Set /A kurczaki=zmienna - ((%RANDOM% %% 5) + 1)
(Echo %kurczaki%) > bin\DB\smth.txt

Set /A kurczaki=zmienna - ((%RANDOM% %% 5) + 1)
> bin\DB\smth.txt Echo %kurczaki%