导出到文件

时间:2016-06-11 17:24:07

标签: variables batch-file

我尝试使用批处理文件每次+ 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

任何知道我做错了什么并且告诉我应该怎么做的人?

非常感谢所有帮助!

2 个答案:

答案 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