在批处理文件中,如何在不打开 echo 的情况下将单词 "on" 回显到文本文件?



我有一个settings.txt文件,看起来像这样:

on
off

在批处理文件的开头,使用这些设置填充各种变量值,例如将%AutoTransfer%设置为on,将AutoViewLog设置为on,等等。每当这些设置之一被打开/关闭时,我调用:WriteSettings函数,它试图这样做:

echo %AutoTransfer% > settings.txt
echo %AutoViewLog% >> settings.txt

但是命令解释器会打开或关闭echo。我试过!AutoTransfer!(!AutoTransfer!),仍然没有运气。当然,我可以将其更改为使用启用/禁用值而不是开/关值,但这会破坏我的菜单,因为这些词很短。如果我将值设置为1表示启用,0表示禁用,我必须为主菜单编写大量代码(一堆&;if&;)语句回显"on"当变量为1时,"off">

我目前的解决方案将工作…它会将值赋给"不是"on"只需要输入单词"is"变量值的一部分,以便我可以在菜单上使用'AutoTransfer %AutoTransfer%'来显示"AutoTransfer is on"。但这感觉就像一个管道胶带解决方案,出于纯粹的学习美德,我想知道是否有一个优雅的解决方案,或者是否所有的解决方案都一样愚蠢/蹩脚/丑陋,甚至可能更糟。

我也不敢相信我是第一个问这个问题的人。我花了20分钟寻找问过这个问题的人……一个也找不到。我真的是第一个想要存储/读取/echo超级基本的& &开/关& &;值设置文件和屏幕?还是说我只是第一个笨到想不明白的人?

使用非空格是实现此目的的常用方法,例如:

echo.on>>settings.txt

这可以防止on被视为echo的命令而不是要回显的字符串。

请注意,在on和输出重定向之间没有空格。如果你把空格放在那里,它实际上是被添加到文件中,这可能是而不是你想要的

可以使用set /P打印

(
set /P ="on" <nul
echo(
set /P ="off" <nul
echo(
) > settings.txt

或者将新行存储在变量中,并像这样使用

setlocal EnableDelayedExpansion
(set n=^
%=Do not remove this line=%
)
echo on!n!off > settings.txt

也可以使用任意组合直接打印空白行

echo(on
echo+on
echo,on
echo/on
echo;on
echo=on
echo[on
echo]on
echo(off
echo+off
echo,off
echo/off
echo;off
echo=off
echo[off
echo]off

虽然最快的方法可能是echo(on,可靠的方法可能是echo:on,但echoon如另一个答案

所示

最新更新