cmd,从txt写入和读取

时间:2016-10-27 13:37:12

标签: batch-file cmd

我正在玩cmd一点,想写一个小应用程序,它涉及一个简单的功能,从txt文件读取一个计数器,然后使用它,最后将计数器提升一个。

set /p x=<file.txt
...
set /a y=x+1
echo %y%>file.txt

问题是它总是返回&#34; ECHO ist eingeschaltet(ON)。&#34;由于某种原因,转换为ECHO的开启(ON)。有人可以解释一下它来自何处以及如何解决它?我不需要任何花哨的东西。我只是想让它发挥作用并知道我的错误在哪里。

2 个答案:

答案 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不会在此处回显,而是由重定向消耗;根据文章Redirection2>构成了一个重定向运算符,告诉我将带有句柄2 STDERR )的流重定向到给定文件。这样的句柄可以从09

有一些方法可以克服这个问题:

  1. 在回显文本和重定向运算符之间插入 SPACE

    echo %y% >file.txt
    

    缺点是 SPACE 成为回音文本的一部分;

  2. echo命令周围放置括号:

    (echo %y%)>file.txt
    
  3. 将重定向部分放在命令行的开头:

    >file.txt echo %y%
    
  4. 我更喜欢最后一个选项,因为这是最通用和最安全的解决方案。此外,还有改进的余地:

    • 引用文件路径/名称以避免在包含空格或其他特殊字符的情况下出现问题;
    • 使用奇怪的语法echo(能够输出所有内容,甚至是空字符串或文字字符串,例如onoff/?;

      > "file.txt" echo(%y%
      

    <强>提示:
    要查看实际情况,请不要通过双击其图标来运行批处理文件;打开一个命令提示符窗口并键入其(引用)路径,这样窗口将保持打开状态,显示任何命令回声和错误消息。此外,为了调试批处理文件,请不要将@echo off置于顶部(或通过前面的rem注释掉,或使用@echo on)以查看命令回声。