批处理文件中的if / then / else逻辑

时间:2014-12-30 15:06:30

标签: batch-file

我正在编写一个批处理文件,用于压缩MS Access 2010文件(文件扩展名为.accdb),使用日期和时间重命名zip文件,然后将zip文件移动到名为Backups的子文件夹。以下显示了目前的代码:

 @echo off
 "C:\Program Files\VMware\VMware Tools\zip.exe" backup.zip *.accdb
 for /f "tokens=1-5 delims=/ " %%d in ("%DATE%") do (set thedate=%%g-%%e-%%f)
 for /f "tokens=1-3 delims=/:" %%a in ("%TIME:~0,8%") do (set thetime=%%a-%%b-%%c)
 set thetime=%thetime: =0%
 rename backup.zip %thedate%_%thetime%.zip
 move %thedate%_%thetime%.zip .\Backups
 %SystemRoot%\explorer.exe .\Backups

这很好用。但是,我想在开头添加一个检查,以查看在执行zip操作之前是否有任何用户打开Access文件(如果有* .laccdb文件,则会出现)。所需的逻辑是:

  1. 检查是否有* .laccdb文件
  2. 如果有/ .laccdb文件/ s然后向用户发送消息以关闭Access文件并中止批处理文件
  3. 如果找不到* .laccdb文件,则继续执行zip操作(如上面的代码所示)
  4. 如何将此IF / THEN / ELSE类型逻辑添加到批处理文件中,如何检查* .laccdb文件?

1 个答案:

答案 0 :(得分:1)

if exist *.laccdb (echo Send the message) else (echo continue the processing)

是完整格式。当然,echo语句可以是您喜欢的任何语句系列,例如

if exist *.laccdb (
 echo Send the message
 goto sendmessage
)
rem the file does not exist, so carry on with the ZIP operation
... your ZIP operation goes in here
goto :eof

:sendmessage
rem put whatever code you want to send the message in here.
goto :eof

请注意,goto :eof非常具体,它需要冒号并表示“转到此批处理文件的末尾”它是cmd的固有内容 - 标签不应该是用户声明的。

if的格式也是具体的。此语法是必需的:

if condition (
 dothis_if_true
) else (
 dothis_if_false
)

括号的定位至关重要。第一次打开必须与if(或执行)位于同一物理行上,如果使用了else,则前面的)和后续(必须与else在同一物理线路上发生。