BAT命令常用API

分享知識  傳遞快樂

 

REM 和 :: 命令

常用註釋方式有兩種:REM 和 ::(雙英文冒號)。

  • REM爲註釋命令,一般用來給程序加上註解,該命令後的內容不被執行,但能回顯。
  • :: (雙英文冒號)也可以起到rem 的註釋作用,而且更簡潔有效,::後的字符行在執行時不會回顯。

 

: (冒號)命令

任何以單冒號:開頭的字符行,在批處理中都被視作標號,而直接忽略其後的所有內容。

  • 有效標號:(:)冒號後緊跟一個以字母數字開頭的字符串,goto語句可以識別。
  • 無效標號:(:)冒號後緊跟一個非字母數字的一個特殊符號,goto無法識別的標號,可以起到註釋作用,所以 :: 常被用作註釋符號,其實 :+ 也可起註釋作用。

 

@ 命令

@字符放在命令前將關閉該命令回顯,無論此時echo是否爲打開狀態。

 

ECHO 命令

輸出信息。

1)打開回顯或關閉回顯功能

格式:

echo [{ on|off }]

如果想關閉“ECHO OFF”命令行自身的顯示,則需要在該命令行前加上“@”,如:

@echo off

2)輸出信息 

格式:echo 信息內容

3)輸出空行,即相當於輸入一個回車 

格式:echo.

值得注意的是命令行中的“.”要緊跟在ECHO後面中間不能有空格,否則“.”將被當作提示信息輸出到屏幕。另外“.”可以用,:;”/[\]+等任一符號替代。

命令ECHO.輸出的回車,經DOS管道轉向可以作爲其它命令的輸入,比如echo.|time即相當於在TIME命令執行後給出一個回車。所以執行時系統會在顯示當前時間後,自動返回到DOS提示符狀態。

4)建立新文件或增加文件內容 

格式:

echo 文件內容>文件名

echo 文件內容>>文件名

例如:

c:>echo @echo off>autoexec.bat建立自動批處理文件

c:>echo c:\cpav\bootsafe>>autoexec.bat向自動批處理文件中追加內容

 

TITLE 命令

設置cmd窗口的標題。

 

MODE 命令

  1. 串行口: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [to=on|off] [xon=on|off] [odsr=on|off] [octs=on|off] [dtr=on|off|hs] [rts=on|off|hs|tg] [idsr=on|off]
  2. 設備狀態: MODE [device] [/STATUS]
  3. 打印重定向: MODE LPTn[:]=COMm[:]
  4. 選定代碼頁: MODE CON[:] CP SELECT=yyy
  5. 代碼頁狀態: MODE CON[:] CP [/STATUS]
  6. 顯示模式: MODE CON[:] [COLS=c] [LINES=n]
  7. 擊鍵率: MODE CON[:] [RATE=r DELAY=d]

還可以設置窗口大小:

mode con cols=100 lines=40

說明:此命令設置DOS窗口大小:40行,100列

 

COLOR 命令

設置命令窗口的顏色,dos的顏色屬性設置是由兩個十六進制數字指定。

背景色:0=黑、1=藍、2=綠、3=淺綠、4=紅、5=紫、6=黃、7=白

前景色:8=灰、9=淡藍、A=淡綠、B=淡淺綠、C=淡紅、D=淡紫、E=淡黃、F=亮白    

設置字體與背景顏色

color 0a

 

SET 命令

用於設置變量或對變量賦值。

格式:

set PATH_HOME=C:\Users\Administrator

參數:

  • /A:命令行開關指定等號右邊的字符串爲被評估的數字表達式。
  • /P:命令行開關允許將變量數值設成用戶輸入的一行輸入。

1)提示用戶輸入

@echo off
set /p num=請輸入要ping的次數:
ping /n %num% 127.0.0.1
pause.

2)提示用戶輸入並計算輸入值

@echo off
set /p b=輸入一個數字:
echo %b%
set /a a=2*%b%
echo %b%+%b%=%a%
pause>nul

set /a 執行數學計算

set /p 提示用戶輸入

 

%% 命令

%%處理變量引導符。

格式:

echo %PATH_HOME%

輸出結果:

C:\Users\Administrator

 

IF 命令

用於條件判斷。

格式:

if <條件> (<方法體>) [else if <條件> (<方法體>)][else (<方法體>)]

1)判斷兩個字符串是否相等

set param=1

if %param% EQU "1" (
    echo true
)

2)驗證文件是否存在

::存在
if exist "C:\a.txt" (
    echo file is find!
) else (
    echo file is not found!
)

::不存在
if not exist "C:\a.txt" (
    echo file is not found!
)

3)帶參數驗證

set param=abc

if /I "%param%" EQU "ABC" (
   echo true
)

參數:

  • if /i:忽略大小寫。

比較參數如下:

  • EQU - 等於
  • NEQ - 不等於
  • LSS - 小於
  • LEQ - 小於或等於
  • GTR - 大於
  • GEQ - 大於或等於

 

RD 命令

刪除目錄。

格式:

rd [/s] [/q] [drive:]path

參數:

  • /S 表示刪除該目錄下所有遍歷的子目錄和文件
  • /Q 刪除目錄時不提示確認,直接刪除

1)刪除目錄

rd /s /q d:\apache\tomcat\apache-tomcat-7.0.67\wtpwebapps

 

MD 命令

創建文件夾。

格式:

md [路徑\]目錄

1)創建單個文件夾

md e:\test

在D盤下建立一個名爲test的文件夾。

2)創建缺省路徑目錄

md test

這裏爲缺省路徑,在當前目錄下創建一個名爲test的文件夾。

3)創建含有空格或是特殊符號的文件夾

md "e:\my test"

在E盤下建立一個名爲my test的文件夾。對於新建的文件夾名稱中包含有空格或是特殊符號的,一定要用雙引號“”把文件夾名括起來。

4)同時創建多個目錄

md d:\test e:\test\aaa test

5)創建多級目錄

md d:\a\b\c

 

REN 命令

重命名文件(夾)。

格式:

ren [drive:][path]filename1 filename2.

1)單個文件的重命名

ren d:\test.txt test.bat

2)缺省路徑文件的重命名

ren test.txt test.bat

缺省路徑情況下,把當前目錄下的123.txt重命名爲456.bat。

3)批量重命名

ren *.bat *.txt

把後綴名爲bat的文件批量更改爲txt後綴後的文件。

通過*和?這兩個通配符來批量重命名。*表示任意多個字符,?表示一個字符。

 

MOVE 命令

移動文件並重命名文件和目錄。

格式:

move [/y | /-y] [drive:][path]filename1[,...] destination

move [/y | /-y] [drive:][path]dirname1 dirname2

參數:

  • [drive:][path]filename1:指定您想移動的文件位置和名稱。
  • destination:指定文件的新位置。目標可包含一個驅動器號和冒號、一個目錄名或組合。如果只移動一個文件並在移動時將其重命名,您還可以包括文件名。
  • [drive:][path]dirname1:指定要重命名的目錄。
  • dirname2:指定目錄的新名稱。
  • /Y:取消確認改寫一個現有目標文件的提示。
  • /-Y:對確認改寫一個現有目標文件發出提示。

1)移動文件

代碼1:

move d:\test d:\test2

如果把文件夾test移到文件夾test2內。

代碼2:

move test.txt test2

把當前目錄下的test.txt移動到當前文件夾test2內。這裏都使用了相對路徑,缺省路徑情況下默認爲當前目錄。

代碼3:

move test.txt e:\test2

把當前目錄下的test.txt移動到e:\test2目錄下。

想要移動的文件(夾)可以使用相對路徑,也可以使用絕對路徑,缺省路徑情況下默認爲當前目錄。

Destination 只能是目錄路徑, 可以使用相對路徑,也可以使用絕對路徑,缺省路徑情況下默認爲當前目錄。

2)重命名文件(夾)

代碼1:

move d:\test d:\test2

這裏要注意一下,如果目標文件夾test2不存在,則把test移到d:\下,並把自身名稱更改爲test2。利用這一特性,move命令具備重命名功能。

代碼2:

move d:\test.txt d:\abc\test2.txt

如果 test2.txt存在,系統將會提示你:改寫 D:\test2.txt 嗎? (Yes/No/All):

當你輸入Y後則test.txt會覆蓋test2.txt。如果test2.txt不存在,則把test.txt移到d:\abc目錄下,並重命名爲test2.txt。

代碼3:

move /y test.txt test2.txt

如果test.txt和test2.txt都存在,通過/y參數後,系統不會提示你,而直接把test.txt覆蓋test2.txt。

代碼4:

move test.txt e:\abc\test2.txt

對於跨區移動,如果test2.txt存在會提示:文件存在。命令不會執行;如果test2.txt不存在,則把test.txt移到e:\abc目錄下,並重命名爲test2.txt。

GOTO 命令

跳轉,用:XX構築一個標記,用goto  XX跳轉到XX標記處。

@echo off

:MENU

echo.
echo. [1] 測試1
echo. [2] 測試2
echo. [0] 退出
echo.
 
echo.請輸入選擇的序號:
set /p ID=
	if "%id%"=="1" goto show1
	if "%id%"=="2" goto show2 
	if "%id%"=="0" exit
PAUSE

:show1
	echo AAAAAAAAAAAAAA
	echo BBBBBBBBBBBBBB
	goto MENU
	
:show2
	echo CCCCCCCCCCCCCC
	echo DDDDDDDDDDDDDD
	goto MENU

當輸入1的時候,會跳轉到show1代碼塊。

注意代碼塊中有個 “goto MENU” 加上這個是爲了不讓輸出後關閉窗口,而是繼續執行 “MENU” 代碼信息。

 

CALL 命令

在批處理的過程中調用另一個批處理,當另一個批處理執行完了後回調自身。

@echo off

:MENU

echo.
echo. [1] 測試1
echo. [2] 測試2
echo. [0] 退出
echo.
 
echo.請輸入選擇的序號:
set /p ID=
	if "%id%"=="1" goto show1
	if "%id%"=="2" goto show2 
	if "%id%"=="0" exit
PAUSE

:show1
	call :show11
	call :show12
	goto MENU
	
:show2
	call :show21
	call :show22
	goto MENU

:show11
	echo AAA-show11
	goto :eof

:show12
	echo BBB-show12
	goto :eof

:show21
	echo CCC-show21
	goto :eof

:show22
	echo DDD-show22
	goto :eof

輸出結果:

 [1] 測試1
 [2] 測試2
 [0] 退出

請輸入選擇的序號:
1
AAA-show11
BBB-show12

 [1] 測試1
 [2] 測試2
 [0] 退出

請輸入選擇的序號:

注意:如果不加 goto:eof 命令,會繼續往下執行。

 

call語句與goto語句區別:

  • goto過去,執行完goto的語句,不會再跳轉回來;
  • call過去,再加上goto:eof,會跳轉回執行call語句的地方繼續執行下面的語句;
  • 使用call語句時需要注意,執行完跳轉的語句之後,記得加上goto,不然將執行2遍跳轉語句。

 

PAUSE 命令

暫停。

 

ERRORLEVEL 命令

程序返回碼。

bat腳本中常用%errorlevel%表達上一條命令的返回值,用於判斷命令執行狀態,命令運行結束後可以用echo %errorlevel%查看返回碼,用於判斷剛纔的命令是否執行成功。

1)判斷一條命令執行狀態

::查找是否有chrome.exe線程
tasklist|find /i "chrome.exe">nul
echo %errorlevel%
if %errorlevel% EQU 0 (
	echo yes
) else (
	echo no
)

一般上一條命令的執行結果返回的值只有兩個,0表示”成功”、1表示”失敗”,實際上,errorlevel 返回值可以在0~255 之間。

2)判斷多條命令執行狀態

@echo off
setlocal enabledelayedexpansion 

tasklist|find /i "360tray.exe">nul
echo 360:!errorlevel!
if !errorlevel! EQU 0 (
	tasklist|find /i "chrome.exe">nul
	echo chrome:!errorlevel!
	
	if !errorlevel! EQU 0 (
		::這個設置爲找不到
		tasklist|find /i "We2Chat.exe">nul
		echo We2Chat:!errorlevel!
		
		if !errorlevel! EQU 0 (
			echo ........
		) else (
			echo We2Chat:no
		)
	) else (
		echo chrome:no
	)
) else (
	echo 360:no
)

pause>nul

輸出結果:

360:0
chrome:0
We2Chat:1
We2Chat:no

在for循環中或if語句中多條命令都需要獲取返回值等情況下,用errorlevel會顯得無效,從第二條命令開始errorlevel的值都不會變。此處涉及批處理中的變量延遲問題,並不是errorlevel無效,而是對errorlevel變量的引用採用的是沒開啓變量延遲情況下的百分號%。

setlocal EnableDelayedExpansion:開啓變量延遲的設置,即延遲環境變量擴展,告訴解釋器在遇到複合語句的時候,不要將其作爲一條語句同時處理,而是一條一條地去解釋。但是這時如果仍然用百分號%來引用變量是不起作用的,必須用感嘆號!,如!errorlevel!。

 

EXIT 命令

退出cmd。

::驗證文件是否存在
if not exist "d:/test.txt" (
	echo 缺少文件!
	pause
	exit
)

學過編程的可以知道,exit類似於return。

 

START 命令

批處理中調用外部程序的命令(該外部程序在新窗口中運行,批處理程序繼續往下執行,不理會外部程序的運行狀況),如果直接運行外部程序則必須等外部程序完成後才繼續執行剩下的指令

1)調用圖形界面打開D盤

start explorer d:\

2)打開多個微信窗口

start D:\WeChat\WeChat.exe&D:\WeChat\WeChat.exe

 

NUL 命令

把執行結果定向到空,不返回任何結果。

格式:

'<執行命令>' >nul

1)屏蔽屏幕輸出

pause > nul

pause 就是暫停命令,執行時會在命令行窗口顯示“請按任意鍵繼續. . .”並等待你按鍵。

pause > nul的作用是同樣的,區別是不顯示“請按任意鍵繼續. . .”這些字,nul相當於空文件,把這些文字隱去了。同樣是等待你按鍵。

2)屏蔽一切屏幕輸出

del abc.txt>nul 2>nul

這個">nul 2>nul"可以屏蔽一切屏幕的輸出。如果使用"[命令]>nul"就可以屏蔽命令在屏幕上的輸出,但是有的命令執行會出錯,即使用了">nul"也不能屏蔽命令產生的信息,所以就在後面加" 2>nul"這個,就是"[命令]>nul+空格+2>nul",這樣,不管命令是否正確的運行,都不會在屏幕看到這個命令所產生的屏幕顯示了。

 

FIND 命令

在文件中搜索字符串。

格式:

find [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

參數:

  • /V:顯示所有未包含指定字符串的行。
  • /C:僅顯示包含字符串的行數。
  • /N:顯示行號。
  • /I:搜索字符串時忽略大小寫。
  • /OFF[LINE]:不要跳過具有脫機屬性集的文件。
  • "string":指定要搜索的文字串,
  • [drive:][path]filename:指定要搜索的文件。

1)查找字符串
 

find "abc" d:/test.txt

::忽略大小寫
find /i "abc" d:/test.txt

2)顯示行號

find /n "abc" d:\abc.txt

3)僅顯示包含字符串的行數

find /c "abc" d:\abc.txt

4)顯示所有未包含指定字符串的行

find /v "abc" d:\abc.txt

這個參數用於找出文件中不包含指定字符串的行。在這裏表示查找不包含"abc"字符串的行。

注意:find命令中要查找的字符串一字要用雙引號" "括起來。

 

FINDSTR 命令

在文件中尋找字符串。

格式:

findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/f:file] [/c:string] [/g:file] [/d:dir list] [/a:color attributes] [/off[line]] strings [[drive:][path]filename[ ...]]

參數:

  • /B:在一行的開始配對模式。
  • /E:在一行的結尾配對模式。
  • /L:按字使用搜索字符串。
  • /R:將搜索字符串作爲一般表達式使用。
  • /S:在當前目錄和所有子目錄中搜索匹配文件。
  • /I: 指定搜索不分大小寫。
  • /X:打印完全匹配的行。
  • /V:只打印不包含匹配的行。
  • /N:在匹配的每行前打印行數。
  • /M:如果文件含有匹配項,只打印其文件名。
  • /O:在每個匹配行前打印字符偏移量。
  • /P:忽略有不可打印字符的文件。
  • /OFF[LINE]:不跳過帶有脫機屬性集的文件。
  • /A:attr:指定有十六進位數字的顏色屬性。請見 "color /?"
  • /F:file:從指定文件讀文件列表 (/ 代表控制檯)。
  • /C:string:使用指定字符串作爲文字搜索字符串。
  • /G:file:從指定的文件獲得搜索字符串。 (/ 代表控制檯)。
  • /D:dir:查找以分號爲分隔符的目錄列表
  • strings:要查找的文字。
  • [drive:][path]filename:指定要查找的文件。

findstr 命令中正則表達式的用法規則

  • .:通配符: 任何字符
  • *:重複: 以前字符或類別出現零或零以上次數
  • ^:行位置: 行的開始
  • $:行位置: 行的終點
  • [class]:字符類別: 任何在字符集中的字符
  • [^class]:補字符類別: 任何不在字符集中的字符
  • [x-y]:範圍: 在指定範圍內的任何字符
  • \x:Escape: 元字符 x 的文字用法
  • \<xyz:字位置: 字的開始
  • xyz\>:字位置: 字的結束
     

1)基本格式:

findstr " strings " [drive:][path]filename

1.1)查找字符串

findstr "abc" d:/test.txt

::忽略大小寫
findstr /i "abc" d:/test.txt

1.2)查找的多個字符串

findstr /r "wechat qq" test.txt

在test.txt中查找包含有 “wechat”或“qq”的行,查找的多個字符串間用空格隔格開。

/R:將搜索字符串作爲正則表達式使用。參數/R 強調以正則表達式規則來解讀字符串。

1.3)在當前目錄和所有子目錄中搜索

findstr /s /i "wechat" *.txt

在當前目錄和所有子目錄中的.txt文件中搜索字符串"wechat"(不區分字母大小寫)。

1.4)指定字符串作爲文字搜索字符串

findstr /c:"tencent wechat" test.txt

在test.txt中查找包含有 “tencent wechat”這幾個字符的行。注意,這裏“tencent wechat”是一整體的。

注意:

  • 在使用 findstr "騰訊 微信" test.txt 的時候,並不能查找到內容,但是,加上開關 /i 或者 /r 之後就正確無誤了,可能是在查找多個純中文字符串的時候的一個bug吧;單個的純中文字符串沒有任何問題。
  • 使用空格隔開搜索字符串,必須要有參數 /C 前綴。例:
::在文件 test.txt 中尋找 "hello" 或 "there"
findstr "hello there" test.txt 

::在文件 test.txt 尋找 "hello there"
findstr /c:"hello there" test.txt

2)通配符和重複符規則

通配符和重複符規則,即 . 和 *。

通配符:即一個句點,代表任何一個字符,而且只能是一個,包括字母、數字、半角符號還有空格。

重複符:即型號* 代表前面字母的出現次數(出現次數從0到多次,0表示沒有)。

2.1)查找任意字符,包括空行

findstr .* test1.txt

或

findstr ".*" test1.txt

2.2)查找指定字符串開關的字符串

findstr ac* test.txt

findstr abcd* test.txt

輸出結果:

a
ac
acc
addc

ab
abc
abdc
abde

在文件 test.txt 中查找出現一個“a”字符串,以及a後面出現過0次或者任意次c的字符行。

在文件test.txt中查找出現一個“ab”字符串,以及ab後面出現過0次或者任意次c的字符行。

3)行首、行尾符規則

即 ^ 和 $。

3.1)查找指定行首的字符串

findstr "^test" test.txt

輸出結果:

test main
testapp

3.2)查找指定行首行尾的行

findstr "^test$" test.txt

在文件test.txt中查找行首爲test,且行尾也爲test的行,即test獨自一行。

4)字符集規則

字符集規則,即[class]。

  • 表示含有集裏的任意一個字符的即匹配。
  • 該字符集裏的元素可以是字母和數字和一般的半角字符,如:}{ ,.][等,但雙引號"不被識別。不能是漢字, 漢字不被正確解釋(漢字不是ASCII碼)。

如果在字符集內插入通配符和重複符號,即"[.*]"將會把. 和 *視爲普通字符,沒有通配和重複的含義。

4.1)查找數字0-9的任意行

findstr "[0-9]" test.txt

輸出結果:

1abcd
3 ab acd

4.2)查找包括任意字母的行

findstr "[a-zA-Z]" test.txt

4.3)查找包括其中任意一字母的行

findstr "[abcezy]" 2.txt

4.4)查找指定字母範圍的行

findstr "[a-gq-t]" test.txt

在文件test.txt中查找小寫字符a到g 或q到t的任意一字母的行。

4.5)匹配任意字母行

findstr "A[abc][123]Y" test.txt

在文件test.txt中查找可以匹配 AaY , AbcY, A234Y的行。

5)減法規則

5.1)過慮純數字的行

findstr "[^0-9]" test.txt

注意:純數字的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!

5.2)過慮純字母的行

findstr "[^a-z]" test.txt

注意:純字母的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!

5.3)過濾僅含有指定字母組成的純字母字符串的行

findstr "[^abc]" test.txt

注意:僅含有由abc三個字母組成的純字母字符串的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!

6)單詞前綴後綴定位規則

該規則是匹配類似單個英文單詞的,即\<xyz和xyz\>

該xyz可以是英文單詞或數字,但不適用於漢字。符號 \ 理解爲轉義符,化解小於號和大於號的重定向命令含義。

6.1)查找指定前綴的字符串的行

findstr "\<abc" test.txt

6.2)查找指定後綴的字符串的行

findstr "abc\>" test.txt

6.3)精確查找

findstr "\<end\> test.txt

 

TASKLIST 命令

查看系統進程。

格式:

tasklist [/s system [/u username [/p [password]]]] [/m [module] | /svc | /v] [/fi filter] [/fo format] [/nh]

參數列表:

  • /S system:指定連接到的遠程系統(IP)。
  • /U [domain\]user:指定使用哪個用戶執行這個命令。
  • /P [password]:爲指定的用戶指定密碼。
  • /M [module]:列出調用指定的 DLL 模塊的所有進程。如果沒有指定模塊名,顯示每個進程加載的所有模塊。
  • /SVC:顯示每個進程中的服務。
  • /V:指定要顯示詳述信息。
  • /FI filter:顯示一系列符合篩選器指定的進程。
  • /FO format:指定輸出格式,有效值: "TABLE"、"LIST"、"CSV"。
  • /NH:指定欄標頭不應該在輸出中顯示。只對 "TABLE" 和 "CSV" 格式有效。

1)查看本機所有進程

tasklist

在“命令提示符”中輸入Tasklist 命令即可顯示本機的所有進程,顯示結果由5部分組成:圖像名(進程名)、PID、會話名、會話#和內存使用。

2)查找某一進程

tasklist|find /i "nginx.exe">nul

tasklist查找所有進程,讓find找出nginx.exe進程。

3)根據pid查詢指定進程

tasklist|findstr xxxx

 

TASKKILL 命令

終止指定進程。

格式:

taskkill [/s system [/u username [/p [password]]]] { [/fi filter] [/pid processid | /im imagename] } [/f] [/t]

參數列表:

  • /S system:指定要連接到的遠程系統。
  • /U [domain\]user:指定應該在哪個用戶上下文執行這個命令。
  • /P [password]:爲提供的用戶上下文指定密碼。如果忽略,提示輸入。
  • /F:指定要強行終止進程。
  • /FI:filter指定篩選進或篩選出查詢的的任務。
  • /PID:process id指定要終止的進程的PID。
  • /IM:image name指定要終止的進程的圖像名。通配符 '*'可用來指定所有圖像名。
  • /T:Tree kill: 終止指定的進程和任何由此啓動的子進程。
  • /?:顯示幫助/用法。

1)根據進程名稱結束某一進程

taskkill /F /IM nginx.exe >nul

2)根據進程PID結束某一進程

taskkill /PID xxx

 

SC 命令

SC 是用於與服務控制管理器和服務進行通信的命令行程序。

格式:

SC [服務器名稱] 命令 [選項名稱=選項值]

常用參數:

  • config 改變一個服務的配置。(長久的)
  • EnumDepend 列舉服務的從屬關係。
  • GetDisplayName 獲得一個服務的顯示名稱。
  • GetKeyName 獲得一個服務的服務鍵名。
  • qc 詢問一個服務的配置。
  • query 詢問一個服務的狀態,也可以列舉服務的狀態類型。

1)查詢Winows具體服務配置

sc query MariaDB

服務名不區分大小寫。

2)實現模糊查詢

sc query state= all | findstr /I "MariaDB"

sc query state= all | find /I "MariaDB"

sc query | find /i "MariaDB"

sc query MariaDB | find /i "STATE">nul

sc query 可以與 findstr/find 實現模糊查詢,並且支持正則。

state狀態:

  • STATE:爲服務運行狀態
  • START_PENDING:啓動中
  • RUNNING:已啓動
  • PAUSED:暫停
  • STOP_PENDING:停止中
  • STOPPED:已停止

3)查詢服務PID

sc queryex MariaDB

4)查看window服務的詳細配置

sc qc MariaDB

start_type爲啓動類型:

  • DEMAND_START:手動
  • AUTO_START:自動
  • DISABLED:已禁用

5)設置服務的啓動類型

sc config MariaDB  start= auto

設置服務的啓動類型:

  • auto(自動)
  • demand (手動)
  • disabled(禁用)

注意:SC命令還可以創建、刪除、啓動、停止服務等。但不推薦sc啓動、停止服務操作,因爲sc啓動服務但不啓動依賴;可以使用 “net  start/stop  服務名” 代替, 該命令會自動啓動或停止相關聯的服務。

 

FOR 命令

格式:

for [參數] %%變量名 in (相關文件或命令) do 執行的命令

注意:

  • for、in和do是for語句的關鍵字,它們三個缺一不可;
  • %%I是for語句中對形式變量的引用,即使變量l在do後的語句中沒有參與語句的執行,也是必須出現的;
  • 在批處理文件中使用for命令時,指定變量請使用 %%variable,而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同於 %I。

參數:

  • /D:參數只能顯示當前目錄下的目錄名字
  • /R:搜索指定路徑及所有子目錄中與set相符合的所有文件
  • /L:該集表示以增量形式從開始到結束的一個數字序列。可以使用負的Step
  • /F:使用文件解析來處理命令輸出、字符串及文件內容。

1)基本用法

1.1)簡單遍歷

for %%I in (A,B,C) do echo %%I

輸出結果:

A
B
C

for語句的形式變量H,可以換成任意一個變量信息。for語句以逗號爲分隔符,把 A,B,C 這個字符串切分成三個元素:A、B和C,由此決定了do後的語句將會被執行3次。

1.2)讀取根目錄

::顯示d盤根目錄下的所有目錄
for /d %%i in (d:\*) do echo %%i

::顯示當前目錄下名字只有1-3個字母的目錄
for /d %%i in (???) do echo %%i

這個參數主要用於目錄搜索,不會搜索文件,/D 參數只能顯示當前目錄下的目錄名字。(只會搜索指定目錄下的目錄,不會搜索再下一級的目錄。)

1.3)搜索指定路徑及所有子目錄中與set相符的所有文件

::查找j盤下所有以.mp4結尾的文件,包含子目錄
for /r j:\ %%i in (*.mp4) do echo %%i

::查找j盤下所有目錄,包含子目錄
for /r j:\ %%i in (1) do echo %%i

::查找j盤下sudu.pdf存在的目錄
for /r j:\ %%i in (sudu.pdf) do if exist %%i echo %%i

此命令會搜索指定路徑及所有子目錄中與set相符合的所有文件,注意是指定路徑及所有子目錄。

  • set中的文件名如果含有通配符(?或*),則列舉/R參數指定的目錄及其下面的所用子目錄中與set相符合的所有文件,無相符文件的目錄則不列舉。
  • 如果set中爲具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的所有子目錄)(並在後面加上具體的文件名),而不管set中的指定文件是否存在。

1.4)以增量形式從開始到結束

for /l %%i in (1,1,5) do @echo %%i
::輸出1 2 3 4 5

for /l %%i in (1,2,10) do @echo %%i
::輸出1,3,5,7,9

for /l %%i in (100,-20,1) do @echo %%i
::輸出100,80,60,40,20

for /l %%i in (1,1,5) do start cmd
::打開5個CMD窗口

for /l %%i in (1,1,5) do md %%i
::建立從1~5共5個文件夾

for /l %%i in (1,1,5) do rd /q %%i
::刪除從1~5共5個文件夾

該命令表示以增量形式從開始到結束的一個數字序列,可以使用負的 Step。

2)高級用法

使用文件解析來處理命令輸出、字符串及文件內容

這個參數是最難的,而且參數也最多。“for /f”常用來解析文本,讀取字符串。

新建一ANSI編碼的bat_test.txt文件,文件內容如下:

1、aaa.txt
2、bbb.txt
3、ccc.mp3
4、ddd.doc
5、eee.txt

2.1)顯示全部內容

@echo off
for /f %%i in (bat_test.txt) do echo %%i
pause>nul

輸出結果:

1、aaa.txt
2、bbb.txt
3、ccc.mp3
4、ddd.doc
5、eee.txt

如果不使用參數“/f”,運行結果只顯示括號裏的文字字符“bat_test.txt”,而不能讀取文本文件“bat_test.txt”中的內容。可見,“/f”是解析文本字符串的好工具。

2.2)根據指定內容分割(delims)

for /f "delims=、" %%i in (bat_test.txt) do echo %%i

for /f "delims=." %%i in (bat_test.txt) do echo %%i

輸出結果:

1
2
3
4
5

1、aaa
2、bbb
3、ccc
4、ddd
5、eee

"delims=、"表示定義頓號“、”爲分隔符,並用該分隔符“、”切分文本字符串。字符串就是“歌曲列表.txt”裏的內容,也就是文件裏的文字和標點符號。

該頓號是原文中就有的。除了頓號“、”,原文中還有減號“-”和點號“.”,因此你也可以用它們來做分隔符。

默認情況下,單純使用delims而不用tokens時,只顯示第一個分隔符前的內容,第一個分隔符和第一個分隔符後面的內容將被忽略。

delims還可以定義多個分隔符,如:“delims=、.”。

2.3)提取單列(tokens)

for /f "tokens=2 delims=、." %%i in (bat_test.txt) do echo %%i

輸出結果:

aaa
bbb
ccc
ddd
eee

用delims定義頓號“、”和點號“.”作爲分隔符,將原文分成三部分。如“1、aaa.txt”被分割成:

第一部分(第一列):1

第二部分(第二列):aaa

第三部分(第三列):txt

“tokens=2”表示用tokens提取第二列的字符串,即“aaa”。

沒有被tokens定義提取的第一列和第三列將被忽略。

2.4)提取多列(tokens)

for /f "tokens=1,3 delims=、." %%i in (bat_test.txt) do echo %%i %%j

輸出結果:

1 txt
2 txt
3 mp3
4 doc
5 txt

“tokens=1,3”表示只提取第一列和第三列。

“delims=、.”表示定義頓號和點號爲分隔符。

“%%i %%j”對應於“token”後面的列數。有多少列就要有多少個輸出變量,並且各變量中的字母存在先後順序。

2.5)忽略分隔符

for /f "tokens=1-3 delims=、." %%i in (bat_test.txt) do echo %%i %%j %%k

輸出結果:

1 aaa txt
2 bbb txt
3 ccc mp3
4 ddd doc
5 eee txt

“tokens=1-3”中的“1-3”表示第一至第三列。
 

 

 

 

 

 

 

 

——————————
如有不足請留言指正
相互學習,共同進步

發佈了114 篇原創文章 · 獲贊 107 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章