我尝试使用批处理文件每次+ 1设置一个变量。因此,当批处理文件打开时,它使用var调用该文件,然后重新定义它加1.但是当我打开文件然后打开count.bat时,我看到这个(在count.bat中):set backupcount=
而不是
它应该是set backupcount=1
(1也可以是2,3,4,5,enz)。
这是我使用的代码:
@echo off
if exist "backup-tool\count.bat" call "backup-tool\count.bat"
if not exist "backup-tool\count.bat" echo set backupcount=0 > "backup-tool\count.bat"
call "backup-tool\count.bat"
if "%backupcount%"=="8" (
echo set backupcount=1 > "backup-tool\count.bat"
) else (
set /a "backupcount=backupcount+=1"
echo set backupcount=%backupcount% > "backup-tool\count.bat"
)
pause >nul
任何知道我做错了什么并且告诉我应该怎么做的人?
非常感谢所有帮助!
答案 0 :(得分:0)
这个需要使用setlocal ENABLEDELAYEDEXPANSION
,因为你在一个代码块中工作,你操作该变量并且你想在那里使用它(不是块外的变量)。这应该有效:
@echo off
setlocal ENABLEDELAYEDEXPANSION
if exist "backup-tool\count.bat" call "backup-tool\count.bat"
if not exist "backup-tool\count.bat" echo set backupcount=0 > "backup-tool\count.bat"
call "backup-tool\count.bat"
if "!backupcount!"=="8" (
echo set backupcount=1 > "backup-tool\count.bat"
) else (
set /a "backupcount=backupcount+=1"
echo set backupcount=!backupcount! > "backup-tool\count.bat"
)
pause >nul
答案 1 :(得分:0)
正如其他答案所说,您原来的问题与延迟扩展有关;但是,您的代码也不必要地复杂。这就是我的方式:
@echo off
if exist "backup-tool\count.bat" call "backup-tool\count.bat"
set /A "backupcount=backupcount%%8+1"
echo set "backupcount=%backupcount%" > "backup-tool\count.bat"
set /A
命令将任何不存在的变量的值视为零,因此当数据文件不存在时,不必将其初始化为零。
如果您希望重复计数从1到8然后将计数器重置为1,则可以使用%
模数运算符以更简单的方式使用if
。输入set /?
以获取有关%%
运营商的详细信息,或参阅this Wikipedia article。
编辑:添加了其他说明
程序第一次运行时backupcount
变量不存在,因此set /A "backupcount=backupcount%%8+1"
表达式生成存储在文件中的1
。您也可以在set backupcount=0
之前添加if
命令,以避免以前执行同一批处理文件时出现问题(或者在开始时添加setlocal
命令)
下次使用1
初始化此变量时,set /A "backupcount=backupcount%%8+1"
表达式会生成2
。下一个数字最多可达8
。
当变量用8
初始化时,表达式backupcount%%8
,即变量除以8时的余数为零;所以整个表达式再次生成1
。