我正在玩cmd一点,想写一个小应用程序,它涉及一个简单的功能,从txt文件读取一个计数器,然后使用它,最后将计数器提升一个。
set /p x=<file.txt
...
set /a y=x+1
echo %y%>file.txt
问题是它总是返回&#34; ECHO ist eingeschaltet(ON)。&#34;由于某种原因,转换为ECHO的开启(ON)。有人可以解释一下它来自何处以及如何解决它?我不需要任何花哨的东西。我只是想让它发挥作用并知道我的错误在哪里。
答案 0 :(得分:0)
Echo on意味着批处理中执行的所有内容也会显示在控制台中。所以你看到命令,并在下一行看到结果。
您可以使用echo off
命令或在要隐藏的命令前面加@
符号来关闭此功能。
所以
::turns of the echo for the remainder of the batch or untill put back on
::the command itself is not shwn because off the @
@echo off
set /p x=<file.txt
...
::the following won't be shown regardless the setting of echo
@set /a y = x+1
echo %y% > file.txt
首次评论后编辑
因为你的命令echo %y%>file.txt
不起作用,你需要在>
符号前面留一个空格,现在得到echo
的结果,它会给你当前的回声设置
这是一个工作样本,为了简单起见,我将所有内容都放在一个变量中。
echo off
set /p x =< file.txt
set /a x += 1
echo %x% > file.txt
答案 1 :(得分:0)
首先,我想向您展示echo
命令行应如何显示:
> "file.txt" echo(%y%
这是您原来的代码行:
echo %y%>file.txt
意外输出ECHO is on.
/ ECHO is off.
的原因是因为echo
命令没有收到回应的任何内容(键入echo /?
并阅读帮助文本以了解什么on
/ off
表示)。假设y
带有值2
,该行会扩展为:
echo 2>file.txt
此处的数字2
不会在此处回显,而是由重定向消耗;根据文章Redirection,2>
构成了一个重定向运算符,告诉我将带有句柄2
( STDERR )的流重定向到给定文件。这样的句柄可以从0
到9
。
有一些方法可以克服这个问题:
在回显文本和重定向运算符之间插入 SPACE :
echo %y% >file.txt
缺点是 SPACE 成为回音文本的一部分;
在echo
命令周围放置括号:
(echo %y%)>file.txt
将重定向部分放在命令行的开头:
>file.txt echo %y%
我更喜欢最后一个选项,因为这是最通用和最安全的解决方案。此外,还有改进的余地:
使用奇怪的语法echo(
能够输出所有内容,甚至是空字符串或文字字符串,例如on
,off
和/?
;
> "file.txt" echo(%y%
<强>提示:强>
要查看实际情况,请不要通过双击其图标来运行批处理文件;打开一个命令提示符窗口并键入其(引用)路径,这样窗口将保持打开状态,显示任何命令回声和错误消息。此外,为了调试批处理文件,请不要将@echo off
置于顶部(或通过前面的rem
注释掉,或使用@echo on
)以查看命令回声。