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上搜索延迟扩展。不管怎样,我会用不同的方式来做。