bat指令碼筆記(一)
檢測數值:
EQU-等於
NEQ-不等於
LSS-小於
LEQ-小於等於
GTR-大於
GEQ-大於等於
IF指令:
if exist 檔名 待執行的命令 :如果有指定的檔案則執行命令,否則執行下一句
if errorlevel / if not errorlevel 數字 待執行的命令 :如果返回碼等於指定的數字,則條件成立執行命令,否則執行下一句。環境變數errorlevel的初始值為0,當一些命令執行不成功,就會返回一個數值,如:1,2等
@ECHO OFF XCOPY F:\test.bat D:\ IF ERRORLEVEL 1 ECHO 檔案拷貝失敗 IF ERRORLEVEL 0 ECHO 成功拷貝檔案
不同命令其返回值所代表的含義也不相同
if “引數”==“字串” 待執行的命令:檢測字串,用if檢測字串是否相等的時候,後面用到的不是“=”,而是“==”,引數如果等於指定的字串,則條件成立,執行命令,否則執行下一句。
CALL命令:call 命令用來從一個批處理指令碼中呼叫另一個批處理指令碼。
START命令:呼叫外部程式,所有dos命令和命令程式行都可以用start命令來呼叫。
常用引數:min 開始時視窗最小化
......
call命令與start命令的區別:start upload.bat不會等upload.bat執行完再執行下一條,如此可以實現同時執行多條命令,call upload.bat命令是要等呼叫的程式結束以後才執行下面的命令。
特殊符號:& :第一條命令 & 第二條命令[&第三條命令...]用這種方法可以同時執行多條命令,而不管命令是否執行成功
&&:第一條命令 && 第二條命令 [&&第三條命令...]當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則一直執行完所有命令。
||:第一條命令 || 第二條命令 [||第三條命令...] ]當碰到執行正確的命令後將不執行後面的命令,如果一直沒有正確的命令則一直執行完所有命令。
@echo off for /? >for.txt set /? >set.txt shift /? >shift.txt exit 執行後在當前路徑下就生成for.txt、set.txt、和shift.txt三個檔案,裡面分別記錄了for命令、set命令和shift命令的幫助資訊。
FOR命令:
tokens=x,y,m-n 提取列
格式:
FOR /F "tokens=x,y,m-n" %%I IN (Command1) DO Command2
用法:
一句話總結:提取列。
通俗講,共同提取每一行的第m小節的內容。
因此,可以用該命令來指定提取文字資訊。
tokens=有時表示提取全部。
tokens=m表示提取第m列。
tokens=m,n表示提取第m列和第n列。
tokens=m-n表示提取第m列至第n列。
Tokens=*表示刪除每行前面的空格。忽略行首的所有空格。
tokens=m*提取第m列以後的所有字元,星號表示剩餘的字元。
tokens=m,*提取第m列以後的所有字元,星號表示剩餘的字元。
輸出變數的個數由定義了的tokens決定。
在 FOR 語句中顯式宣告 %%i。使用tokens= 隱式宣告%%j 和%%k。只要不會引起試圖宣告高於字母“z”或“Z”的某個變數,則使用tokens= 可以指定最多 26 個輸出變數。
接著前面的例子“靜夜思”。
如果我要提取第三小節“舉頭望明月”,如何做到?
@echo off
for /f "delims=, tokens=3" %%i in (靜夜思.txt) do echo %%i
pause>nul
講解:
首先用delims=,表示命令要用逗號作為詩句的分隔符將四句分成四小節。然後用tokens=3提取第三小節,即“舉頭望明月”了。
delims=和tokens=共用一對雙引號,如果單獨用雙引號,則FOR命令返回的只能是它們之中的一個。因為在第一節說過,FOR是逐一讀取命令的,將delims和tokens分開後,FOR只能一次讀取一個,不能一次全部讀取。
注意:
Tokens常和delims一起使用。
首先,一行內容被delims用分割符號如逗號等分隔成許多小段或小節。
然後,tokens才能提取每行之間對應的這些小段或小節——列。具體看下面例子。
例:提取前面例子文字“a.txt”中每行的第三段內容“ccc”、“kkk”、“ggg”、“考試”。
@echo off
for /f "skip=1 delims=,, tokens=3" %%i in (a.txt) do echo %%i
pause>nul
注意:為什麼kkk不出現呢?
例:如何遮蔽掉文字“a.txt”中的標點符號?
@echo off
for /f "skip=1delims=,, tokens=1-4" %%i in (a.txt) do echo %%i %%j %%k %%l
pause>nul
講解:
%%i %%j %%k %%l是輸出變數,它的個數由tokens後面的(m-n)決定,一般有(n-m+1)個,但不能超過Z。
並且%%後面的字母存在先後順序,%%a %%b是順向,倒過來則是逆向的。
代行號的tokens=m*,星號表示m後面的所有剩餘的列。
例:
for /f "tokens=*" %%i in (a.txt) do echo %%i
講解:
沒有指定具體的列,"tokens=*"將
提取全部列,後面只需一個輸出變數%%i。
例:
for /f "tokens=2*" %%i in (a.txt) do echo %%i %%j
講解:
"tokens=2*"提取第二列以後的所有字元,星號表示剩餘的字元。輸出變數%%i對應於2的輸入變數,%%j對應於星號的輸入變數。
注意:
這裡沒有使用delisms但卻以空格分隔了,是因為FOR預設空格是做分隔符的。
例:遮蔽掉“易經.txt”中的標點符號:
@echo off
for /f "tokens=1-5 delims=:," %%a in (易經.txt) do echo %%a %%b %%c %%d %%e
pause>nul
講解:
當delims定義了兩個分隔符“:”和“,”時,提取列要用到tokens。
有五個列,所以tokens要定義提取第一列至第五列,即1-5,相應地,後面需要五個輸出顯示變數%%a %%b %%c %%d %%e。你也可以這樣修改,避免過多的變數符號
你也可以將最後多餘的句號定義為分隔符“delims=:,。”將其遮蔽掉。
【續】[一日一教學]批處理系列帖子索引 http://www.bathome.net/thread-13798-1-1.html
TASKLIST 命令:
TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
描述:
該工具顯示在本地或遠端機器上當前執行的程序列表。
引數列表:
/S system 指定連線到的遠端系統。
/U [domain\]user 指定應該在哪個使用者上下文執行這個命令。
/P [password] 為提供的使用者上下文指定密碼。如果省略,則
提示輸入。
/M [module] 列出當前使用所給 exe/dll 名稱的所有任務。
如果沒有指定模組名稱,顯示所有載入的模組。
/SVC 顯示每個程序中主持的服務。
/APPS 顯示 Microsoft Store 應用及其關聯的程序。
/V 顯示詳細任務資訊。
/FI filter 顯示一系列符合篩選器
指定條件的任務。
/FO format 指定輸出格式。
有效值: "TABLE"、"LIST"、"CSV"。
/NH 指定列標題不應該
在輸出中顯示。
只對 "TABLE" 和 "CSV" 格式有效。
/? 顯示此幫助訊息。
篩選器:
篩選器名稱 有效運算子 有效值
----------- --------------- --------------------------
STATUS eq, ne RUNNING | SUSPENDED
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名稱
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 會話編號
SESSIONNAME eq, ne 會話名稱
CPUTIME eq, ne, gt, lt, ge, le CPU 時間,格式為
hh:mm:ss。
hh - 小時,
mm - 分鐘,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 記憶體使用(以 KB 為單位)
USERNAME eq, ne 使用者名稱,格式為
[域\]使用者
SERVICES eq, ne 服務名稱
WINDOWTITLE eq, ne 視窗標題
模組 eq, ne DLL 名稱
注意: 當查詢遠端計算機時,不支援 "WINDOWTITLE" 和 "STATUS"
篩選器。
Examples:
TASKLIST
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI "STATUS eq RUNNING"
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域\使用者名稱 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"