从文本文件中读取整数,进行数学运算,写回结果失败

时间:2017-01-25 11:23:02

标签: loops batch-file

我正在尝试通过创建.txt文件并从中删除数字来循环,直到.txt文件中的变量为0。 这是我得到了多远:

@echo off
set /p a=<Name.txt
set /a c=%a%-1
echo %c%> Name.txt
echo %a%
echo %c%
PAUSE

在文本文件中我输入了一个数字,例如8。 它的意思是取这个数字并从中减去1然后它就是要记住它,然后再次用8 - 1 7的{​​{1}}重新覆盖文本文件。 因此,在名为Name.txt的文本文件中,我希望看到7,但我看到的是一个空行。请帮我解决这个问题。我试图创建一个看不见的代码窗口,它会出现并在不知情的情况下发布消息。

3 个答案:

答案 0 :(得分:3)

取代

echo %c%> Name.txt

使用

>Name.txt echo %c%

直接在重定向器之前的数字可能会导致问题

答案 1 :(得分:1)

我对你的代码感到很困惑。您将name.txt的内容存储在变量%a%(set /p a=<Name.txt)中。然后,您将%c%回显到文本文件中。这应该怎么样?您的代码中永远不会设置%c%。您也错过了将数字减少一个的完整部分。此外,您不必删除该文件并再次创建它。只需替换&gt;&gt;用&gt;覆盖文件的完整内容。

但是,此代码应该满足您的需求:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
:LOOP
SET /P a=<name.txt
SET /a a=!a!-1
ECHO !a!>name.txt
PAUSE
IF NOT !a!==0 GOTO LOOP

答案 2 :(得分:0)

如果echo %c%> Name.txt包含一个十进制数字,则实际问题是行%c,因为这会与>符号一起解释为redirection handle。只要%c%包含一个由多个数字组成的数字,您的代码就可以正常工作。

要解决此问题,请选择以下选项:

  1. 将重定向部分移到前面:

    > Name.txt echo %c%
    

    这是最可靠的解决方案。

  2. 将重定向的命令放在括号中:

    (echo %c%) > Name.txt
    
  3. >符号前插入空格

    echo %c% > Name.txt
    

    请注意,添加的空间将成为输出的一部分。