gpt4 book ai didi

batch-file - 批处理 : Why does appending a textfile write "ECHO is off" instead?

转载 作者:行者123 更新时间:2023-12-05 00:54:51 25 4
gpt4 key购买 nike

所以我写了一个批处理,其中有一些代码来检查它通过读取文本文件运行了多少次,然后将新的增加的数字写回到该文本文件中。

@ECHO OFF
for /f "delims=" %%x in (TimesRun.txt) do set Build=%%x
set Build=%Build%+1
@echo Build value : %Build%
echo %Build%>>TimesRun.txt
Pause

这确实附加了文本文件,但它添加了“1+1”。傻我!我忘了使用/a 开关来启用算术运算!但是当我相应地更改代码时......
@ECHO OFF
for /f "delims=" %%x in (TimesRun.txt) do set Build=%%x
set /a Build=%Build%+1
@echo Build value : %Build%
echo %Build%>>TimesRun.txt
Pause

......发生了一些有趣的事情:ECHO 关闭,而不是附加我的文件。写在控制台上。现在,我知道这通常发生在 ECHO在没有文本或空变量的情况下使用。我添加了第一个 @echo Build value : %Build%具体看变量Build是否为空;事实并非如此,并且计算是正确进行的。
我已经想通了
>>TimesRun.txt (echo %Build%)

确实带来了预期的结果。我还是不明白为什么
echo %Build%>>TimesRun.txt

不,但是。我错过了什么?

最佳答案

您无意中指定了重定向句柄。

Redirection允许您指定某个句柄来定义要重定向的内容:

0     = STDIN  (keyboard input)
1 = STDOUT (text output)
2 = STDERR (error text output)
3 ~ 9 = undefined


对于输入重定向操作符 < , handle 0默认使用;用于输出重定向运算符 >>> , 默认句柄是 1 .

您可以通过在重定向运算符前放置一个数字来显式指定句柄;例如 2>定义重定向错误文本输出。

在您的 echo%Build% 时,您无意中在命令行中执行此操作是单个数字,如 1例如:
echo 1>>TimesRun.txt

为避免这种情况,您有以下选择:
  • 要反转语句以便重定向定义首先出现:
    >>TimesRun.txt echo %Build%

    这是最通用和最安全的重定向方式。
  • 要将重定向的命令括在括号中:
    (echo %Build%)>>TimesRun.txt

    这也可以安全地工作。
  • 要将空格放在重定向运算符的前面:
    echo %Build% >>TimesRun.txt

    这也有效,但额外的 SPACE 包含在 echo 的输出中.

  • 另见这篇很棒的帖子: cmd.exe redirection operators order and position .

    关于batch-file - 批处理 : Why does appending a textfile write "ECHO is off" instead?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39147347/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com