代码之家  ›  专栏  ›  技术社区  ›  gemDay

批处理文件随机语法错误

  •  0
  • gemDay  · 技术社区  · 7 年前

    正如我在问题中所说,我的代码中出现了一个无法解释的语法错误。

    我正在搜索一个每5分钟自动备份一些存储的程序。在我没有找到任何属于我目的的东西之后,我决定自己做这件事。。批量生产。

    代码如下:

    @echo off
    
    set name=Backup
    
    for /f "tokens=1-3 delims=/:" %%a in ("%TIME%") do (set mytime=%%a.%%b,%%c)
    set mytime=%mytime:~0,8%
    set backupname=%name%_%date%_%mytime%
    
    set dir1= (here comes the source directory)
    set dir2= (here comes the target directory)
    
    set countvar=1
    
    :start
    
    For /f "tokens=1-3 delims=/:" %%a in ("%TIME%") do (set mytime=%%a.%%b,%%c)
    set mytime=%mytime:~0,8%
    
    set backupname=%name%_%date%_%mytime%
    set dir2=(here comes the target directory)\%backupname%
    echo Backupordner: %backupname%
    ROBOCOPY %dir1% %dir2%
    
    if "%countvar%" == "1" (
        set VarDir1=%dir2%
    )
    if "%countvar%" == "2" (
        set VarDir2=%dir2%
    )
    if "%countvar%" == "3" (
        set VarDir3=%dir2%
        rmdir /S /Q "%VarDir1%"
        set VarDir1=%VarDir2%
        set VarDir2=%VarDir3%
        set /a countvar=%countvar%-1
    )
    set /a countvar=%countvar%+1
    
    @ping -n 30 localhost> nul
    
    goto start
    

    它基本上是将文件从源目录复制到目标目录中以日期和时间命名的文件夹中。

    由于备份文件的大小太大,我决定添加一个功能,删除第三个最旧的保存,因此剩下两个较新的保存文件。

    这就是问题所在:前两个“delete”工作正常,第三个“delete”导致语法错误。之后一切正常。

    有人知道问题出在哪里吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Magoo    7 年前

    另一个例子是 delayedexpansion 陷阱

    什么时候 vardir3 是建立的,它没有价值,所以 vardir2 收购 没有什么 在第一次 count=3

    第二次, var1 获取该值,因此在第三种情况下,您会得到一个语法错误 变量1 为空。

    解决方案:忘记 var3 完全在里面 计数=3 设置 var2 %dir2%

    请搜索更多关于 delayed expansion

    此外,您最好使用 set "var=value" 对于字符串赋值 指定可能在该行上的任何尾随空格。