我們在日常工作中常常會遇到一些需要重複進行的工作,又或者我們的專案在轉交客戶時需要去簡化設定過程
這時我們就需要使用到一些自動化部署操作,我們常常會採用指令碼來完成這部分功能
下面我們來介紹一種指令碼型別Bat指令碼,我們會從以下方面介紹:
首先我們需要去簡單瞭解一下指令碼
首先我們需要知道指令碼是什麼:
那麼指令碼具有什麼優勢:
那麼市面上常見的指令碼都有哪些:
首先我們需要先去了解一下Bat指令碼:
Bat指令碼是一種以.bat結尾的檔案,可以直接雙擊點選使用即可
全稱batch指令碼,也稱批次檔,是Windows系統預設支援的指令碼語言
然後我們給出一個簡單的Bat指令碼,介紹一下基本格式:
REM 這是註釋,@echo off表示關閉Bat指令碼內容展示
@echo off
REM set表示定義變數
set name=123
REM echo表示頁面輸出,%%中包含變數名可以使用變數
echo %name%
REM goto:eof表示結束不再繼續下面的內容
goto:eof
下面我們會介紹Bat的基本語法內容
首先我們介紹註釋資訊:
@:表示不顯示本行資訊,但是仍執行
REM:表示註釋資訊,該註釋資訊不會顯示
"::":也表示註釋資訊,實際上":"加任意符號都可以表示無資訊顯示,但我們通常用::來表示註釋
我們給出簡單範例:
REM 我是註釋
:: 我是註釋
首先我們來介紹echo的五種用處:
我們給出簡單範例:
REM 我們採用@來隱藏該行指令,這樣本行就不會出現在介面
REM 我們使用echo off,那麼我們後續的指令就不會出現在介面中
@echo off
REM 正常輸出語句
echo 123
REM 這裡如果我們輸出所拼接的字串,直接拼接即可
echo hello world
REM 表示換行符
echo.
REM 表示將123寫入t.txt文字中
echo 123 > t.txt
REM 表示將456覆蓋進t.txt文字中,這時文字內為456
echo 123 > t.txt
REM 表示將789追加到t.txt文字中,這時文字內為789
echo 789 >> t.txt
我們先來簡單介紹一個pause:
我們常常會將其用於暫停頁面檢視資訊:
REM 我們採用@來隱藏該行指令,這樣本行就不會出現在介面
REM 我們使用echo off,那麼我們後續的指令就不會出現在介面中
@echo off
REM 我們檢視一個較長的資料
echo 123
REM 我們可以在中途暫停檢視資料,點選後檢視下一個資料
pause
REM 我們檢視一個較長的資料
echo 456
我們簡單介紹title:
我們給出簡單範例:
@echo off
REM 設定標題為this is a test
title this is a test
我們先來介紹一下set關鍵字:
我們給出一個簡單範例:
@echo off
REM set 後跟變數名=變數值,注意不能存在空格
set name=ScriptHome
REM 然後我們可以採用%%去使用該資料
echo %name%
REM 我們可以直接進行拼接
set age=18
echo %name%%age%
REM set的變數值可以進行介面互動獲取(set /P 變數名=提示資訊)
set /P yourname=你的名字是:
echo %yourname%
下面我們來介紹跳轉關鍵字:
我們給出一個簡單範例:
:: goto展示
@echo off
REM 下述是一個死迴圈,我們正常使用時不能這樣書寫,下述會一直輸出1
:top
echo 1
goto:top
:: goto:eof 表示結束,執行後就不會再執行後續命令
REM 下述命令只會執行1,不會執行2,因為在中間進行了中斷
@echo off
echo 1
goto:eof
echo 2
首先我們需要知道Bat指令碼其實是基於cmd命令來實現的,所以我們首先給出window的一些常用命令:
windows命令列 | 功能描述 | linux終端 |
---|---|---|
cd | 切換工作目錄 | cd |
dir | 列出當前資料夾下所有檔案 | ls [-lh] |
type | 檢視檔案內容 | cat |
md/mkdir | 建立目錄 | mkdir |
del | 刪除檔案 | rm |
rd | 刪除目錄 | rm -r |
copy/xcopy | 拷貝 | cp [-r] |
cls | 清屏 | clear |
findstr | 根據關鍵字查詢 | grep |
move/rename | 移動/重新命名 | mv/rename |
tasklist | 查詢程序 | ps [-ef] |
taskkill | 殺死程序 | kill [-9] |
下面我們統一來介紹一些其他語法
::首先我們需要介紹一個Bat指令碼中文亂碼修復辦法:使用 chcp 65001 命令列
::當然我們也可以在儲存時手動選擇為ANSI編碼格式來解決中文亂碼問題
@echo off
chcp 65001
set param1=hello
set param2=world
REM 預設情況下可能會導致你好出現亂碼狀況,但是有chcp 65001相當於選擇 ANSI 編碼格式,可以修復亂碼問題
echo %param1%%param2%你好
::start可以呼叫同目錄級別下的其他檔案
下面我們來介紹一些關於Bat的常用內容
除了常用的符號我們還需要注意一些常用的系統變數:
REM 當前工作路徑
%CD%
REM 當前日期,格式為"星期日 DD/MM/YYYY"
%DATE%
REM 當前時間,格式為"HH:MM:SS.SS"
%TIME%
REM 一個從0~32767之間的亂數
%RANDOM%
REM 之前的命令是否出錯(出錯為0,出錯為1+)
%ERRORLEVEL%
REM 當前登入使用者名稱
%USERNAME%
REM 當前使用者的使用者資料夾目錄
%USERPROFILE%
REM 當前使用者的應用程式資料資料夾目錄
%APPDATA%
首先我們來介紹Bat中常用的各類符號的功能
命令列回顯遮蔽符@的主要用途:
批次處理變數引導符%的主要用途:
重定向符>的主要用途:
命令管道符| 的主要用途:
跳脫字元^的主要用途:
組合命令&的主要用途:
組合命令&&的主要用途:
組合命令|| 的主要用途:
下面我們來介紹Bat指令碼中的一些進階內容
首先我們需要了解Bat指令碼中的函數:
我們來給出一些簡單的函數範例:
::首先我們先來宣告函數
REM 宣告兩個函數
:method1
@echo hello
:method2
@echo world
REM 但實際上輸出的結果會是helloworld,因為只要存在在bat中該程式碼都會被執行,所以我們需要一些命令避免執行
:: 我們會採用call來呼叫函數同時分段在末尾書寫goto:eof來中斷後續程式碼執行
REM 宣告兩個函數並呼叫第二個函數
@echo off
call:method2
goto:eof
:method1
@echo hello
goto:eof
:method2
@echo world
goto:eof
REM 那麼我們只會執行world,因為call呼叫method2,然後method2末尾有goto:eof回到原位置執行第二個goto:eof結束bat檔案
下面我們來介紹一下陣列:
我們下面給出陣列範例:
:: 我們首先給出基礎陣列
set arr=1,3,5,6,8
REM 這裡是一個for迴圈,我們會在後續介紹,大致意思就是從arr陣列種提取資料a,然後展示
for %%a in (%arr%) do (
@echo %%a
)
:: 然後我們來展示帶有下標的陣列
set a[0]=1
set a[1]=3
set a[2]=5
set a[3]=7
set a[4]=9
set a[5]=11
REM 這裡也是for迴圈,大致意思從0~5全部遍歷一遍為n,然後去獲得a[n]的值
for /l %%n in (0,1,5) do (
@echo !a[%%n]!
)
我們這裡介紹的迴圈是for迴圈:
基本格式:FOR %%variable IN (set) DO command [command-parameters]
其中%%variable表示我們獲取的陣列中的各個元素值
其中set表示我們所定義的陣列,有的可以是陣列,有的可以是自定義的一些資料
最後do(),()中書寫所需要執行的for迴圈內容
我們需要注意的是針對不同的for迴圈引數具有不同的意義:
下面我們給出關於for迴圈的一些案例:
:: 基本回圈語法
for [/d/l/r/f] %%i in () do (
)
:: 這裡講解一個知識點:\dir /b 指定目錄\ 這個語法可以用於獲得指定目錄下的所有檔案和資料夾
REM %~dp0等同於%CD%,表示當前路徑
set curdir=%~dp0test1\
for /f %%i in ('dir /b "%curdir%"') do (
echo %%i
)
:: /d 表示獲取某一目錄下的所有資料夾
REM 表示bat同目錄級下的所有資料夾
for /d %%i in (%cd%\*) do (
@echo %%i
)
:: /l 可以使用一個序列來做迴圈,包含三個引數,第一個引數是開始值,第二個引數是跨步值,第三個引數是結束值
REM 例如下面我們會從1~10每隔兩位輸出,輸出為1,3,5,7,9
for /l %%i in (1 2 10) do (
echo %%i
)
REM 此外也可以實現倒數輸出
for /l %%i in (10 -2 1) do (
echo %%i
)
:: /r 可以獲取某一個目錄下所有的檔案以及資料夾下的檔案
REM 獲得該目錄下的所有檔案及資料夾內的txt文字檔案
for /r %%i in (*.txt) do (
@echo %%i
)
:: /f 讀取檔案(下述的/表示換行)
REM 例如我們的資料為:
REM ID NAME AGE
REM 1 zhang 18
REM 2 lisi 15
REM 3 wang 19
REM 讀取user.txt檔案並展示(預設唯讀取每行第一個空格前的資訊)
REM 那麼展示的資料就是ID /1 /2 /3
for /f %%a in (user.txt) do (
echo %%a
)
REM 可以增加一個"delims="的引數,表示不分割讀取每一行
REM 那麼展示的資料就是ID NAME AGE /1 zhang 18 /2 lisi 15 /3 wang 19
for /f "delims=" %%a in (user.txt) do (
echo %%a
)
REM 也可以採用"delims=分隔符"來將其分割輸出,同時需要採用tokens設定獲取幾列資料
REM delims= 表示以空格作為分隔符;tokens=1-3表示獲取第1~3列分別作為%%a,%%b,%%c來作為引數輸出
for /f "tokens=1-3 delims= " %%a in (user.txt) do (
echo %%a - %%b - %%c
)
這篇文章中詳細介紹了Bat指令碼的優勢和一些具體語法來幫助我們快速構建指令碼,希望能為你帶來幫助
下面給出我學習和書寫該篇文章的一些參考文章,大家也可以去仔細觀賞:
bat批次處理指令碼大全:bat批次處理指令碼大全_bat指令碼_luffy5459的部落格-CSDN部落格
批次處理文字指令碼教學:超詳細 批次檔指令碼(bat) 教學(持續更新)_bat指令碼_哈森程式猴的部落格-CSDN部落格
【最全】BAT批次處理指令碼教學:【最全的】BAT 批次處理指令碼教學_bat指令碼菜鳥教學_致守的部落格-CSDN部落格