1. 程式人生 > 實用技巧 >bat指令碼實踐,涉及if else 、xcopy 、goto等語法

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指令碼語句需要多嘗試、多實踐,加油