我有一个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
如另一个答案