如果我犯了一个明显的错误,请原谅。
我一直在使用的批处理文件是准备一些文件夹(D:\ Backups_pc和子文件夹Backup_Main和Backup_Copy)。视它们是否存在而定,取决于它们是否连接在D:驱动器上。
第一次运行批处理文件时,它会创建文件夹,然后将所需的文件夹和文件自动复制到“ Backup_Main”中。第二次及以后,批处理文件将在同一D驱动器上执行,它应将Backup_Main复制到Backup_Copy,然后Robocopy将更新Backup_Main。
它不会那样做,但总是会转到'KDTFirstRun'。
我曾尝试通过IF EXIST D:\ Backups_pc \ Backup_Copy来评估文件夹的存在,并且执行了类似的操作,所以在此版本中,我尝试先检查所有内容并将其存储,以为可能缓冲或评估不正确,请尝试进行预置它(可以这么说)。它没有用,所以我很茫然。我看不到变量定义中的空格,数学或任何引起问题的东西,还是我盲目?
非常感谢您的帮助。谢谢。菲尔。
@ECHO off
SETLOCAL
:: Batchfile to do two types of backup
:: Attempt using variables defined here and set to ZERO
SET /A RootB=0
SET /A MainB=0
SET /A CopyB=0
:: Set the Variables based on folders being in place or not
IF EXIST "D:\Backups_pc\" SET /A RootB=1
IF EXIST "D:\Backups_pc\Backup_Main\" SET /A MainB=1
IF EXIST "D:\Backups_pc\Backup_Copy\" SET /A CopyB=1
:: Diagnostics Echo reports
ECHO R = %RootB%
ECHO M = %MainB%
ECHO C = %CopyB%
SET /A KDTCheck = %RootB% + %MainB% + %CopyB%
ECHO KDTCheck is %KDTCheck%
PAUSE
IF /I KDTCheck EQU 3 GOTO KDTUPdate
IF /I KDTCHeck EQU 2 GOTO KDTFolderError
IF /I KDTCheck EQU 1 GOTO KDTFolderError
IF /I KDTCheck EQU 0 GOTO KDTFirstRun
:KDTFirstRun
ECHO Initialising System and Preparing Backup_Copy.
:: Create the necessary folders, I know I could get smarter but lets get the IF stuff working first.
MD D:\Backups_pc
MD D:\Backups_pc\Backup_Main
MD D:\Backups_pc\Backup_Copy
ECHO Folders created on D Drive
ECHO Backing Up Backup_Main
:: Robocopy a lot of folders
ECHO Backup_Main has been updated with latest data from your computer.
GOTO KDTend
:KDTUpdate
ECHO Updating Backup_Copy.
:: Copy the Backup_Main to Backup_Copy
ECHO In KDTUPdateMain Updating Backup_Main
:: Re run the Robocopy stuff that was done in KDTFirstRun
ECHO Backup_Main has been updated with latest data from your computer.
GOTO KDTend
:KDTFolderError
:: Some limited diagnostics to view.
ECHO There is a problem with the Backup Folders on Drive D.
ECHO R = %RootB%
ECHO M = %MainB%
ECHO C = %CopyB%
ECHO KDTCheck is %KDTCheck%
:KDTend
ENDLOCAL
PAUSE
@ECHO ON
问题在这里:
IF /I KDTCheck EQU 3 GOTO KDTUPdate
您需要在变量周围使用%
变量标记:
IF %KDTCheck% EQU 3 GOTO KDTUPdate
没有这些,它是在比较[[string KDTCheck
,而不是变量内容。并且,由于所有if
语句均失败,因此仅进入以下代码。
/I
,对数字进行不区分大小写的比较几乎没有意义。IF %KDTCheck% EQU 3 GOTO KDTUPdate
IF %KDTCHeck% EQU 2 GOTO KDTFolderError
IF %KDTCheck% EQU 1 GOTO KDTFolderError
:KDTFirstRun