bat指令碼實踐,涉及if else 、xcopy 、goto等語法
本人在上一篇文章中為了解決SVN客戶端CLeanup使用中遇到的問題,具體參考:https://mp.csdn.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 前後需要有空格,否則指令碼不能正確進行
知識點 2. xcopy 是用於複製檔案和資料夾 ,可以利用window 提供的幫助,具體在cmd下輸入 xcopy /? 回車
注意:指令碼中 我是要把sqlite整個資料夾及其子檔案全部複製到 c:\software\sqlite3\sqlite\路徑下,注意路徑c:\software\sqlite3\sqlite\最後需要寫上 \,否則執行指令碼會有以下提示,操作就需要人工參與。
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指令碼語句需要多嘗試、多實踐,加油