我正在尝试通过创建.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
,但我看到的是一个空行。请帮我解决这个问题。我试图创建一个看不见的代码窗口,它会出现并在不知情的情况下发布消息。
答案 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%
包含一个由多个数字组成的数字,您的代码就可以正常工作。
要解决此问题,请选择以下选项:
将重定向部分移到前面:
> Name.txt echo %c%
这是最可靠的解决方案。
将重定向的命令放在括号中:
(echo %c%) > Name.txt
在>
符号前插入空格:
echo %c% > Name.txt
请注意,添加的空间将成为输出的一部分。