這個語法中,options
用於設定文字匹配選項,source
指定了文字**(可以是文字檔案、字串或者命令的輸出資訊),statement
指定了在文字匹配時要執行的命令。source
中的每行文字被命令shell當做乙個記錄處理,不同欄位由特定的字元分隔開(比如製表符或空格,預設情況下是空格)。通過替換技術,命令shell在執行時會使用變數的實際值來替代佔位符變數。舉個例子,比如下面乙個文字:
xiaodong wang engineer [email protected] luoyang
假如儲存在c:\introduce.txt
裡面。可以看出,這段文字從內容上分別代表:
實際操作是,希望將它分開,則可以輸入這樣的指令碼程式:
rem ************************
rem script
:analysisfile.bat
rem creation
data
:2016-7-26
rem last
modified
:2016-7-26
rem author
:xiaodong
wang
rem email
:347916416
@qq.com
rem ************************
rem description
:analysis a file structure
rem and show the result
rem ************************
rem files
:stores output none
rem ************************
@echo off
for /f "tokens=1-5"
%%a in (c:\introduce.txt) do (
@echo name: %%a
%%b depart: %%c
email
:%%d adress: %%e)
則輸出為:name: xiaodong wang depart: engineer email: [email protected] adress: luoyang
命令指定要處理前五個字段,並且變數以%%a
開始,則後面的字段分別是%%b、%%c...
,一次類推。下表展示了所有["options"]
可以使用的選項:
選項選項描述
例項例項描述
eol設定行尾注釋字元後的所有資料都被命令shell看出注釋
eol=#
將#設定為行尾注釋符
skip
設定檔案起始處跳過的行數
skip=5
通知命令shell跳過原始檔中的1到5行
delims
設定各欄位之間的分隔符,預設情況下為製表符或者空格
delims=,.;
指定逗號、句點、分號為分隔符
tokens
為每一源行設定令牌字段,如果以a或者a作為起始的迭代變數,則至多可以指定26個令牌。預設情況下,只對第乙個令牌進行檢查
tokens=1,3 tokens=2-5
第乙個例項將令牌字段設定為使用1與3,第二個例項將令牌字段設定為使用2、3、4、5
usebackq
規定可以在源指定符中使用引號:對檔名使用雙引號,對命令使用反引號,對字串使用單引號
usebackq
啟用該選項
例如,如果描述中需要用到命令,則可以使用usebackq
,比如下面的語句:
for /f "tokens=1-5 usebackq" %a
in (`type "c:\introduce.txt"`) do (@echo
name: %a %b
depart: %c
email: %d
adress: %e)`
使用了命令,因此在裡面使用了反引號(`)和usebackq
選項。
使用子程式
有時候,我們在程式中會用到子程式,這樣就會用到goto
語句,比如下面的**:
if "%1"=="1" goto sub1
代表如果輸入的第乙個引數為1,則呼叫sub1的子程式,同時命令shell會跳轉到相應的子程式:sub1
處,舉個例子:
rem ************************
rem script: testgoto.bat
rem creation data: 2016-7-26
rem last modified: 2016-7-26
rem author: xiaodong wang
rem email: [email protected]
rem ************************
rem description: test goto method
rem ************************
rem files: stores output none
rem ************************
@echo off
if"%1"=="" (echo error: no parameter passed with script!) & (goto
exit)
if"%1"=="1"
goto subroutine1
if"%1"=="2"
goto subroutine2
if"%1"=="3"
goto subroutine3
(echo error: parameter must 1or2
or3) & (goto
exit)
:subroutine1
echo in subroutine 1
goto
exit
:subroutine2
echo in subroutine 2
goto
exit
:subroutine3
echo in subroutine 3
goto
exit
:exit
echo exiting...
這個程式就代表如果沒有輸入第乙個引數,則直接跳到:exit
處,否則根據引數的值來跳轉到對應的程式處。
還有乙個值得學習的命令call
,代表呼叫其他指令碼程式,如:
if
"%1"=="1"
call script1
if"%1"=="2"
call script2
根據第乙個輸入的引數來呼叫對應的指令碼程式~
檢查系統資訊
通常在使用使用者計算機時,可能需要檢查一些基本的系統資訊。這時常用的命令有下面四個:
- [ ] date。可以顯示並設定當前系統的日期。
- [ ] time。可以顯示並設定當前系統的時間。
- [ ] whoami。顯示當前登入到系統的使用者名稱。
- [ ] where。使用某種搜尋模式搜尋檔案,並返回匹配結果。
前面三個命令自己嘗試一下就好,非常簡單。關鍵是第四個命令需要解釋一下:
預設情況下,where
命令會在當前目錄以及環境變數path
指定的路徑中進行搜尋。因此,只要在命令shell視窗中輸入where
命令,其後跟隨要搜尋的可執行程式名,就可以快速地在當前路徑中搜尋該可執行程式。比如輸入:
where cmd.exe
上面命令的輸出結果為cmd.exe
的全檔案路徑:
c:\windows\system32\cmd.exe
使用where
命令還有一種常用方法是:
where /r basedir filename
/r
代表從指定目錄(basedir)開始遞迴搜尋,包含所有子目錄。filename代表要搜尋檔案的全名或者部分名字,其中可以包括萬用字元。?
匹配單個字元,*
匹配多個字元。比如,data???.txt或者data*.*。比如下面命令:
-where /r c:\data*.txt
代表在c:\目錄及其子目錄下搜尋檔名以data開始的文字檔案。
-where /r c:\data*.*
代表搜尋檔名以data開始的所有型別檔案。
window 基本命令
window 基本命令 1.window r 開啟doc 視窗 2.window 基本命令 2.1.cls 清屏 2.2.cd change directory 改變目錄 cd 絕對路徑 帶碟符的 相對路徑。2.3.cd 切換上級目錄。盤中預設有乙個名字為.的資料夾。2.4.cd 當前目錄。切換目錄...
redis 基本命令(三)
一.鏈結命令 redis 命令用於在 redis 服務上執行操作。以下例項講解了如何啟動 redis 客戶端 1.啟動 redis 客戶端,開啟終端並輸入命令redis cli。該命令會連線本地的 redis 服務。redis cli redis 127.0.0.1 6379 redis 127.0...
Linux基本命令三
使用者管理 使用者賬戶 1.可以登入作業系統 2.實現訪問控制 不同的使用者許可權不同 組賬戶 方便對使用者管理 唯一表識 uid gid 系統賬戶 0 999 普通賬戶 1000 往上 useradd 建立使用者命令 useradd u 數字 使用者名稱 指定使用者uid useradd d 目錄...