Batch file 使用批处理脚本在文本文件中读取和写入整数

Batch file 使用批处理脚本在文本文件中读取和写入整数,batch-file,Batch File,我有以下批处理脚本: @echo off if exist test.txt ( set /p foo=<test.txt echo "read: %foo%" set /A foo=foo+1 (echo %foo%)>test.txt echo "wrote: %foo%" ) else ( (echo 1)>test.txt ) 但是,我得到了以下输出: C:\opt>test.bat C:\opt>test

我有以下批处理脚本:

@echo off
if exist test.txt (
    set /p foo=<test.txt
    echo "read: %foo%"
    set /A foo=foo+1
    (echo %foo%)>test.txt
    echo "wrote: %foo%"
) else (
    (echo 1)>test.txt
)
但是,我得到了以下输出:

C:\opt>test.bat

C:\opt>test.bat
"read: 2"
"wrote: 2"

C:\opt>test.bat
"read: 2"
"wrote: 2"

C:\opt>test.bat
"read: 3"
"wrote: 3"

C:\opt>test.bat
"read: 3"
"wrote: 3"

C:\opt>test.bat
"read: 4"
"wrote: 4"

C:\opt>test.bat
"read: 4"
"wrote: 4"

为什么变量
foo
看起来不像预期的那样递增?

您需要使用延迟变量展开,以便从计算中获得当前值:

@echo off
setlocal enabledelayedexpansion
if exist test.txt (
    set /p foo=<test.txt
    echo "read: !foo!"
    set /A foo=foo+1
    (echo !foo!)>test.txt
    echo "wrote: !foo!"
) else (
    (echo 1)>test.txt
)
@echo关闭
延迟扩展
如果存在test.txt(
set/p foo=test.txt
echo“写道:!foo!”
)否则(
(echo 1)>test.txt
)

您需要使用延迟变量展开,以便从计算中获得当前值:

@echo off
setlocal enabledelayedexpansion
if exist test.txt (
    set /p foo=<test.txt
    echo "read: !foo!"
    set /A foo=foo+1
    (echo !foo!)>test.txt
    echo "wrote: !foo!"
) else (
    (echo 1)>test.txt
)
@echo关闭
延迟扩展
如果存在test.txt(
set/p foo=test.txt
echo“写道:!foo!”
)否则(
(echo 1)>test.txt
)

您的代码可以简化

如果先将变量设置为零,然后使用
set/p
和重定向读取文本文件,则会覆盖变量。此时,无论变量处于何种状态,都可以向其添加1

@echo off
set "foo=0"
IF exist "test.txt" set /p foo=<test.txt
echo read: %foo%
set /A "foo+=1"
echo wrote: %foo%
>test.txt echo %foo%

您的代码可以简化

如果先将变量设置为零,然后使用
set/p
和重定向读取文本文件,则会覆盖变量。此时,无论变量处于何种状态,都可以向其添加1

@echo off
set "foo=0"
IF exist "test.txt" set /p foo=<test.txt
echo read: %foo%
set /A "foo+=1"
echo wrote: %foo%
>test.txt echo %foo%

搜索StackOverFlow上的延迟扩展。不管怎样,我会做不同的事情。在StackOverFlow上搜索延迟扩展。不管怎样,我会用不同的方式来做。