bat脚本实践,涉及if else 、xcopy 、goto等语法

时间:2024-05-19 10:08:53

本人在上一篇文章中为了解决SVN客户端CLeanup使用中遇到的问题,具体参考:https://mp.****.net/console/editor/html/109098420

 

编写了两个windows下的bat脚本,下面说说这两个脚本中的内容

(吐槽一下:windows的bat脚本语言语法非常严格,比较起C++、JAVA这种高级编程语言来说稍微不注意就不能正常运行,也没有好用的IDE,但有些场合还不得不用)

 

install_sqlite.bat脚本

if exist  c:\software\sqlite3 (

echo "has exist"

) else (

if not exist c:\software\sqlite3 md c:\software\sqlite3

xcopy sqlite c:\software\sqlite3\sqlite\ /E /C

)

pause

知识点 1. if exist else 语法 ,可以利用window 提供的帮助,具体在cmd下输入 if /? 回车

注意:else 前后需要有空格,否则脚本不能正确进行

bat脚本实践,涉及if else 、xcopy 、goto等语法

 

 

知识点 2. xcopy 是用于复制文件和文件夹 ,可以利用window 提供的帮助,具体在cmd下输入 xcopy /? 回车

bat脚本实践,涉及if else 、xcopy 、goto等语法

 

注意:脚本中 我是要把sqlite整个文件夹及其子文件全部复制到 c:\software\sqlite3\sqlite\路径***意路径 c:\software\sqlite3\sqlite\最后需要写上  \,否则执行脚本会有以下提示,操作就需要人工参与。

bat脚本实践,涉及if else 、xcopy 、goto等语法

 

 

deal_svn_cleanup.bat脚本

@echo on

 

if exist  c:\software\sqlite3 (

 goto DEALCLEAN

) else (

 goto ECHOTIP

)

 

:DEALCLEAN

set path=%path%;c:\software\sqlite3\sqlite\

rem echo %path%

cd .svn

sqlite3 wc.db "delete from work_queue"

sqlite3 wc.db "delete from wc_lock"

pause

exit

pause

 

:ECHOTIP

echo "sqlite not exist"

pause

知识点 3. 在if else 语句内容使用了跳转goto语法

说明:本身没有使用跳转语法,但是 像 set path 语句和cd 语句直接放在if语句中不能成功运行,因此通过跳转语句解决,这里本人没有细究原因。

 

其他说明:

下面给出deal_svn_cleanup.bat脚本的中间版本,该脚本是有问题的,但是可以学习,若开启变量延迟后变量,在if语句中修改变量,注意%bExist% 要写成 !bExist!才生效

@echo off

rem setlocal enabledelayedexpansion

rem 若开启变量延迟后变量  %bExist% 需要写为 !bExist!

set  bExist=false

 

rem echo %bExist%

 

if exist  c:\software\sqlite3 (

   echo "sqlite exist"

   set   bExist=true

) else (

echo "not exist"

)

 

rem echo %bExist%

if  "%bExist%" == "true" (

rem echo "execute delete command"

set path="%path%;c:\software\sqlite3\sqlite\"

rem echo %path%

cd .svn

sqlite3 wc.db "delete from work_queue";

sqlite3 wc.db "delete from wc_lock";

) else (

echo "not execute delete command"

)

 

pause

 

总结:写bat脚本语句需要多尝试、多实践,加油