bat 批示处理详解-1
bat 批示處理詳解-1
- 一: bat 文件理解
- 1> 理解
- 2> 批處理運行命令機制
- 二: dos命令整理
- 1> dos命令 help /commadn /? -查詢幫助
- 2> dos命令使用查詢
- 1. 傳參命令--COLOR -H
- 2. 查詢指令 SYSTEMINFO
- 3. DOS窗口的編碼格式
- 三: bat 語法介紹
- 1> 輔助命令
- 1. 符號&轉義&組合
- 符號-“”、%、:, ; () !
- 轉義\換行
- 組合
- 2. echo 回顯
- 3. pause
- 4. 句柄
- 2> 文件處理命令
- 1. 文件處理
- ren 重命名
- move 移動
- del 刪除
- 2. 文件調用及區別call&start& goto
- 3> 執行語句命令
- 1. if else& if& if exist
- 2. if errorlevel number
- 3. for 循環
- /L
- /d
- /r
- /F
- 4. continue 和 break
- 4> 其他相關常用命令
- 1. 路徑相關
- 2. 傳參相關
- 3,字符串處理
- A: 分割
- B: 替換
- C:拼接
- D: 計算長度
- E: 截取字符,傳遞參數
- 4. set 命令
- A: set 賦值
- B: set /p 讀取輸入
- C: set /a 數學運算
- D: set 字符截取& 替換
- E: set 賦值變量
- F: set 字符開頭變量
- 5. ping 命令
- 6. shutdown命令
- 7. choice 命令
- 四:題外話
- 1> call 文件的相互傳參
- 2> setlocal enabledelayedexpansion 含義
- 3> bat 批示處理詳解-2
一: bat 文件理解
1> 理解
windows下BAT批處理的工作原理就是一次處理多條DOS命令,其效果和在DOS下依次執行各條命令相同;BAT文件其實就是文本文件,用任意文本編輯器均可打開。
windows下借助bat文件,相對于–Linux下借助shell腳本可以完成很多操作步驟繁瑣但操作次序相同,且整個過程需要重復執行多次的情況
2> 批處理運行命令機制
批處理讀取命令時是按行讀取,在處理之前要完成必要的預處理工作;在其中包含該命令中的變量賦值;
應用場景:'交換'兩個變量的值,但是'不使用臨時'變量set var1=abcset var2=123set var1=%var2%& set var2=%var1%原因:先做'預處理'-->'變量值'替換錯誤語法:
set a=123 & echo %a% # 命令是按行讀取,此處還未對a做處理,所以此處是有錯誤的為了解決這類問題,設置變量延遲
作用:在讀取完成一行語句后,不立即對該行的變量進行賦值,而是會對某單條語句執行后,在進行賦值,這也是延遲變量賦值作用;
解讀:%variable%‘不能感知’變量的’變化’
@echo off setlocal enabledelayedexpansion for /l %%i in (1,3,10) do ( set a=%%i # 此處不能使用 %a% echo !a! )pause二: dos命令整理
1> dos命令 help /commadn /? -查詢幫助
cmd界面直接輸入---》help 如下命令| CD | 顯示當前目錄的名稱或將其更改。 |
| CHDIR | 顯示當前目錄的名稱或將其更改。 |
| BREAK | 設置或清除擴展式 CTRL+C 檢查。 |
| DATE | 顯示或設置日期 |
| DIR | 顯示一個目錄中的文件和子目錄 |
| ECHO | 顯示消息,或將命令回顯打開或關閉 |
| EXIT | 退出 CMD.EXE 程序(命令解釋程序) |
| FIND | 在一個或多個文件中搜索一個文本字符串。 |
| FINDSTR | 在多個文件中搜索字符串。 |
| HELP | 提供 Windows 命令的幫助信息。 |
| PATH | 為可執行文件顯示或設置搜索路徑。 |
| PAUSE | 暫停批處理文件的處理并顯示消息。 |
| ENDLOCAL | 結束批文件中環境更改的本地化。 |
| TIME | 顯示或設置系統時間。 |
| CLS | 清除屏幕 |
| SYSTEMINFO | 顯示計算機的特定屬性和配置。 |
| COLOR | 設置默認控制臺前景和背景顏色。 |
| COPY | 將至少一個文件復制到另一個位置。 |
| MD | 創建一個目錄。 |
| RD | 刪除目錄。 |
| MKDIR | 創建一個目錄。 |
| MKLINK | 創建符號鏈接和硬鏈接 |
| MODE | 配置系統設備。 |
| MORE | 逐屏顯示輸出。 |
| MOVE | 將一個或多個文件從一個目錄移動到另一個目錄。 |
| COMP | 比較兩個或兩套文件的內容 |
| OPENFILES | 顯示遠程用戶為了文件共享而打開的文件。 |
| DEL | 刪除至少一個文件。 |
| ERASE | 刪除一個或多個文件。 |
| FC | 比較兩個文件或兩個文件集并顯示 它們之間的不同。 |
| RECOVER | 從損壞的或有缺陷的磁盤中恢復可讀信息。 |
| REN | 重命名文件。 |
| RENAME | 重命名文件。 |
| REPLACE | 替換文件。 |
| RMDIR | 刪除目錄。 |
| ROBOCOPY | 復制文件和目錄樹的高級實用工具 |
| CALL | 從另一個批處理程序調用這一個。 |
| IF | 在批處理程序中執行有條件的處理操作。 |
| SET | 顯示、設置或刪除 Windows 環境變量。 |
| SORT | 對輸入排序。 |
| FOR | 為一組文件中的每個文件運行一個指定的命令。 |
| GOTO | 將 Windows 命令解釋程序定向到批處理程序中某個帶標簽的行。 |
| SETLOCAL | 開始本地化批處理文件中的環境更改。 |
| START | 啟動單獨的窗口以運行指定的程序或命令。 |
| TASKLIST | 顯示包括服務在內的所有當前運行的任務。 |
| TASKKILL | 中止或停止正在運行的進程或應用程序。 |
| TYPE | 顯示文本文件的內容。 |
| 打印一個文本文件。 |
| TITLE | 設置 CMD.EXE 會話的窗口標題。 |
| TREE | 以圖形方式顯示驅動程序或路徑的目錄結構。 |
| VER | 顯示 Windows 的版本。 |
| CHCP | 顯示或設置活動代碼頁數。 |
| CHKDSK | 檢查磁盤并顯示狀態報告。 |
| ASSOC | 顯示或修改文件擴展名關聯。 |
| CHKNTFS | 顯示或修改啟動時間磁盤檢查。 |
| ATTRIB | 顯示或更改文件屬性。 |
| CMD | 打開另一個 Windows 命令解釋程序窗口。 |
| BCDEDIT | 設置啟動數據庫中的屬性以控制啟動加載。 |
| CACLS | 顯示或修改文件的訪問控制列表(ACL)。 |
| COMPACT | 顯示或更改 NTFS 分區上文件的壓縮。 |
| CONVERT | 將 FAT 卷轉換成 NTFS。你不能轉換當前驅動器。 |
| DISKPART | 顯示或配置磁盤分區屬性。 |
| DOSKEY | 編輯命令行、撤回 Windows 命令并創建宏。 |
| DRIVERQUERY | 顯示當前設備驅動程序狀態和屬性。 |
| FSUTIL | 顯示或配置文件系統屬性。 |
| FTYPE | 顯示或修改在文件擴展名關聯中使用的文件類型。 |
| FORMAT | 格式化磁盤,以便用于 Windows。 |
| GPRESULT | 顯示計算機或用戶的組策略信息。 |
| GRAFTABL | 使 Windows 在圖形模式下顯示擴展字符集。 |
| LABEL | 創建、更改或刪除磁盤的卷標。 |
| ICACLS | 顯示、修改、備份或還原文件和目錄的 ACL。 |
| POPD | 還原通過 PUSHD 保存的當前目錄的上一個值。 |
| SCHTASKS | 安排在一臺計算機上運行命令和程序。 |
| SHIFT | 調整批處理文件中可替換參數的位置。 |
| SHUTDOWN | 允許通過本地或遠程方式正確關閉計算機。 |
| PROMPT | 更改 Windows 命令提示。 |
| PUSHD | 保存當前目錄,然后對其進行更改。 |
| SC | 顯示或配置服務(后臺進程)。 |
| SUBST | 將路徑與驅動器號關聯。 |
| VERIFY | 告訴 Windows 是否進行驗證,以確保文件正確寫入磁盤。 |
| VOL | 顯示磁盤卷標和序列號。 |
| XCOPY | 復制文件和目錄樹。 |
| WMIC | 在交互式命令 shell 中顯示 WMI 信息。 |
| REM | 記錄批處理文件或 CONFIG.SYS 中的注釋(批注)。 |
2> dos命令使用查詢
dos_command -help(-h)
1. 傳參命令–COLOR -H
設置默認的控制臺前景和背景顏色。COLOR [attr]attr 指定控制臺輸出的顏色屬性。顏色屬性由兩個十六進制數字指定 -- 第一個 對應于背景,第二個對應于前景。每個數字 可以為以下任何值:0 = 黑色 8 = 灰色1 = 藍色 9 = 淡藍色2 = 綠色 A = 淡綠色3 = 淺綠色 B = 淡淺綠色4 = 紅色 C = 淡紅色5 = 紫色 D = 淡紫色6 = 黃色 E = 淡黃色7 = 白色 F = 亮白色如果沒有給定任何參數,此命令會將顏色還原到 CMD.EXE 啟動時 的顏色。這個值來自當前控制臺 窗口、/T 命令行開關或 DefaultColor 注冊表 值。如果嘗試使用相同的 前景和背景顏色來執行COLOR 命令,COLOR 命令會將 ERRORLEVEL 設置為 1。示例: "COLOR fc" 在亮白色上產生淡紅色DEMO
COLOR 72# 背景7 = 白色, 字體 2 = 綠色2. 查詢指令 SYSTEMINFO
C:\Users\CHH_PC>SYSTEMINFO 主機名: DESKTOP-T164P4E OS 名稱: Microsoft Windows 10 專業版 OS 版本: 10.0.19044 暫缺 Build 19044 OS 制造商: Microsoft Corporation OS 配置: 獨立工作站 OS 構建類型: Multiprocessor Free 注冊的所有人: CHH_PC 注冊的組織: 暫缺 產品 ID: 00331-20020-00000-AA583 初始安裝日期: 2022/4/15, 20:25:43 系統啟動時間: 2022/6/25, 0:02:32 系統制造商: Dell Inc. 系統型號: Inspiron 7472 系統類型: x64-based PC 處理器: 安裝了 1 個處理器。[01]: Intel64 Family 6 Model 142 Stepping 10 GenuineIntel ~1600 Mhz3. DOS窗口的編碼格式
936 是微軟為中國區設置的編碼格式,當然,我們也可以對編碼格式進行修改 chcp 編碼格式代碼 #這種只是臨時的進行修改當前文件的編碼格式,當這個DOS窗口關閉后又將恢復到原來的編碼格式| 950 | 繁體中文 |
| 65001 | UTF-8 |
| 936 | 簡體中文默認的GBK |
| 437 | MS-DOS 美國英語 |
| 1253 | 希臘語 |
| 1258 | 越南語 |
| 1256 | 阿拉伯語 |
三: bat 語法介紹
1> 輔助命令
1. 符號&轉義&組合
符號-“”、%、:, ; () !
:冒號
** : : 開頭為單個冒號;被視作標號,而直接忽略后面所有的內容;
有效標號: 冒號后緊跟一個以字母數字開頭的字符串,goto語句可以識別;
無效標號:冒號后緊跟一個非字母數字開頭的字符串,goto語句無法識別;可以起到注釋左右;即作為習慣 ** :: ** 常被用做注釋符號,其實后面一個 ** : ** 可以替換成任意字符也能起到注釋效果,如::+** 、 :* …
REM:‘注釋命令’,一般用來給程序’加上注解’,該命令后的內容’不被執行, 但’能回顯;
%注釋內容% :用于行內注釋,極少用,慎用;
| :: | 不可回顯,被視作無效命令 |
| REM或rem | 不被執行,能回顯,可用于config.sys文件 |
“”: 雙引號: 允許在字符串中出現空格;
%:百分號
| % | 批處理變量引導符號 |
| %var% | 引用變量 |
| %0、—%9 | 0為批量本身,1-9為傳參;例如:copy %0 /sys/ |
| 行內注釋 | %注釋內容%-但不能出現重定向等符號 |
, 逗號
逗號相當于空格,在某些情況下“,”可以用來當做空格使
dir,c:\ 或者傳參 12,23
; 分號
分號,當命令相同時,可以將不同目標用;來隔離,但執行效果不變,如執行過程中發生錯誤,則只返回錯誤報告,但程序仍會執行。
dir c:\;d:\;e:\;z:\ 等同于
dir c:\
dir d:\ …
() 括號
小括號在批處理編程中有特殊的作用,左右括號必須成對使用,括號中可以包括多行命令,這些命令將被看成一個整體,視為一條命令行。
在for語句和if語句中常見,用來嵌套使用循環或條件語句,其實括號()也可以單獨使用;
demo
! 感嘆號
在變量延遲問題中,用來表示變量,即%var%應該表示為!var!
轉義\換行
| ^開頭 | 對特殊符號’<、>、&'的前導字符,在命令中他將’以上3個符號’的’特殊’功能去掉,僅僅只把他們’當成符號’而’不使用’他們的特殊意義 |
| ^末尾 | 在語句末尾起到換行作用 |
組合
&、&&、||:把多條命令組合起來成一條命令執行
語法: 第一條命令 & 第二條命令 & 第三條命令 [&…]
| & | 把多條命令順序執行,中間有語句錯誤,不影響下一句語句執行,無條件執行&符號后面的命令 |
| && | 當&&前面的命令成功執行時,執行&&后面的命令,否則不執行 |
| 雙管道符 | 當前面的命令失敗時,執行符號后面的命令,否則不執行 |
優先級別
'|' 大于 '>、>>' 大于 '||、&&' # 管道命令優先高于重定向命令,重定向命令優先高于組合命令;2. echo 回顯
備注: echo 后面的字符串’不需要加’雙引號–>否則也會’寫入文件’中 -->區別Linux
關閉回顯:是指’運行批處理文件’時,‘不顯示’文件里的’每條命令’,只顯示’運行結果’;
@echo off #從’本行開始’關閉回顯 ----一般批處理’第一行’都是這個
用法:
A:echo 配合@ \off\on 關閉打開回顯
B:echo 后面跟空格加字符,回顯字符串信息作用;
C: echo緊跟 .|,管道符后可以跟命令用來回顯;
bat內容
@echo off echo.|SYSTEMINFO pauseD: echo 生成文件并寫入信息;
echo a test file. >1.txt # 此處生成文件并寫入內容,且a test file. 后有個空格; echo a test file.>1.txt# 此處生成文件并寫入內容,且a test file. 后無空格;因為 **file.>1** ,連接處無空格; echo a test file.>>1.txt# 此處生成文件并寫入內容或者對文件內容后面追加內容;E:echo 使電腦發出聲音用來提示;
| 蜂鳴 | echo pause>nul |
3. pause
運行此句會暫停批處理的執行并在屏幕上顯示Press any key to continue…的提示,等待用戶按任意鍵后繼續;
4. 句柄
句柄:代碼中智能指針;
| ‘>&’ | 將一個句柄內容輸出寫入到另一個句柄輸入 |
| '<& ’ | 將一個句柄讀取輸入寫入到另一個句柄輸出中 |
| 總述 | 常用句柄定義0,1,2,其中3-9未定;stdin可以被<重定向,stdout可以被 > ,>> 重定向; |
| 1>nul | 禁止輸出正確信息;1,2代表某數據流入流出的地址, |
| 2>nul | 禁止輸出錯誤信息;1,2代表某數據流入流出的地址, |
| 0 | 標準輸入stdin,鍵盤輸入 |
| 1 | 標準輸出stdout,輸出到命令提示符窗口conole |
| 2 | 標準錯誤輸出stderr,輸出到命令提示符窗口conole |
2> 文件處理命令
1. 文件處理
ren 重命名
ren 1.png 2.png # first_file target_filemove 移動
move file_pat target_pathdel 刪除
刪除一個或多個文件。DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] namesnames 指定一個或多個文件或者目錄列表。通配符可用來刪除多個文件。如果指定了一個目錄,該目錄中的所有文件都會被刪除。/P 刪除每一個文件之前提示確認。/F 強制刪除只讀文件。/S 刪除所有子目錄中的指定的文件。/Q 安靜模式。刪除全局通配符時,不要求確認/A 根據屬性選擇要刪除的文件屬性 R 只讀文件 S 系統文件H 隱藏文件 A 準備存檔的文件I 無內容索引文件 L 重新分析點O 脫機文件 - 表示“否”的前綴如果命令擴展被啟用,DEL 和 ERASE 更改如下:/S 開關的顯示句法會顛倒,即只顯示已經 刪除的文件,而不顯示找不到的文件。2. 文件調用及區別call&start& goto
直接調用,在文本中直接調用文件名;例如:@echo off 2.png ,可以直接打開圖片
call 調用另一個批處理文件或可執行程序
start 調用;調用外部程序,所有的 DOS命令 和 命令行程序 都可以由 start命令 來調用
常用參數: MIN :開始時窗口最小化 SEPARATE :在分開的空間內開始 16 位 Windows 程序 HIGH: 在 HIGH 優先級類別開始應用程序 REALTIME :在 REALTIME 優先級類別開始應用程序 WAIT :啟動應用程序并等候它結束 parameters 這些為傳送到命令/程序的參數================================ Sample:start /MIN test2.bat arg1 arg2 (調用同目錄下的 test2.bat,且輸入2個參數給他,且本窗口最小化)goto label: —:label
區別:其中主要是直接調用與call區別,其他只是跳轉
| 直接調用 | 可以調用別的批處理文件,但是這樣調用的批處理文件執行結束后不會回到原來的批處理文件 |
| call | 調用另一個批處理文件或可執行程序,并不終止原來的文件;主要來進行批處理的內部調用,當然也可以調用可執行程序, |
| start | 可以調用別的批處理文件 &文件&可執行文件;執行結束后不會回到原來的批處理文件;而start 不能進行內部調用,但是其可以執行幾乎所有的外部程序。call 是在當前窗體進行調用一個子進程,變量可以互通,但是start 調用外部程序是相當于是新開一個進程。call 可以將參數傳入子進程,子進程也可以將值返回,但是start 只能進行傳參,但是不能返回參數或者變量 |
| goto | 其后可以直接調用,但主要運用在循環中的跳轉;goto label: 跳轉到指定標簽行,然后從" : label " 的下一行開始處理命令 ,goto 語句經常和 if 連起來用label 的名字可以隨意取,goto 是根據 " : " 找到該標簽的,不要忘記了 冒號。 |
demo
@echo offecho goto goto test1: :test1 # 直接跳轉在這里,可以放在循環中跳轉 start test1.bat pause3> 執行語句命令
1. if else& if& if exist
if 表示將判斷是否符合規定的條件,從而決定執行不同的命令;
語法:
DOS命令里并沒有 != 這種寫法,但是提供了 not 關鍵詞,也是條件取反的意思
demo
@echo off if exist test1.bat (test1.bat)^ else (echo "the file not exist") ::當存在second.bat 時就執行這個批處理文件 否則打印"the file not exist" pause 這里是可執行文件在同級目錄下,可以添加相對路徑也可以放對決路徑; test1.bat 等文件可以被執行,2.png 像圖片之類的可以被直接打開;如果是多個條件,建議適當使用括號把各條件包起來;
if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) else (echo comment3 )2. if errorlevel number
執行返回值 ,返回的是數字;一般DOS程序會在執行結束后返回一個數字來代表程序運行的結果,稱為錯誤碼 errorlevel 或者返回碼,有點返回值那味了是不
常見的返回碼為 : 0 1
errorlevel 0 成功 errorlevel 1 失敗
@echo off if exist 2.png (2.png)^ else (echo "the file not exist") ::當存在second.bat 時就執行這個批處理文件 否則打印"the file not exist" if errorlevel 0 (echo operate sucess) else (echo not sucess) pause ===================== operate sucess 請按任意鍵繼續. . .3. for 循環
for 命令是一個比較復雜的命令,主要用于參數在指定的范圍內循環執行命令;
基本命令:
FOR %%variable IN (set) DO command [command-parameters]
FOR 參數 %%變量名 IN (相關文件或命令) DO 執行的命令
| %%variable | 指定一個單一字母可替換的參數。 |
| (set) | 指定一個或一組文件。可以使用通配符。 |
| command | 指定對每個文件執行的命令。 |
| command-parameters | 為特定命令指定參數或命令行開關。 |
參數: FOR有4個參數 /d /l /r /f
| /l | 含開關/L的for語句,可以根據set里面的設置進行循環,從而實現對循環次數的直接控制 |
| /d | 表示僅為目錄 , 它只能顯示當前目錄下的目錄名字;如果集里面包含通配符,則指定與目錄名匹配,而不與文件名匹配 |
| /r | /R參數之后還可帶盤符及路徑; |
| /f | 含開關/F的for語句具有最強大的功能,它能夠對字符串進行操作,也能夠對命令的返回值進行操作,還可以訪問硬盤上的ASCII碼文件,比如txt文檔等 |
/L
命令:
FOR /L %%variable IN (start,step,end) DO command
其中,start為開始計數的初始值,step為每次遞增的值,end為結束值。當end小于start時,step需要設置為負數
求和
@echo offset /a sum=0 for /l %%i in (1,1,100) do set /a sum=sum+%%i echo %sum% pause ================================ 5050 請按任意鍵繼續. . ./d
命令:
FOR /D %variable IN (set) DO command [command-parameters]
/r
FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
/r 后無路徑:對腳本所在路徑遍歷
/r 后跟路徑:對跟的指定路徑遍歷
含開關/R的命令有時候被用于通過遍歷文件夾來查找某一個文件或文件夾
/F
命令:
FOR /F [“options”] %%variable IN (set) DO command
其中,set為(“string”、‘command’、file-set)中的一個;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個或多個的組合。一般情況下,使用較多的是skip、tokens、delims三個選項;
| skip=n | 從文本開始忽略n行 |
| delims | 指定定界符 |
| tokens | 提取列。 通俗講,共同提取每一行的第m小節的內容。因此,可以用該命令來指定提取文本信息。 |
tokens 講解
| tokens= | 提取全部。 |
| tokens=m | 提取第m列。 |
| tokens=m,n | 提取第m列和第n列。 |
| tokens=m-n | 提取第m列至第n列。 |
| tokens=* | 刪除每行前面的空格。忽略行首的所有空格。 |
| tokens=m* | 提取第m列以后的所有字符,星號表示剩余的字符。 |
| tokens=m,* | 提取第m列以后的所有字符,星號表示剩余的字符。 |
輸出變量的個數由定義了的tokens決定。
demo
對日志符號替換
顯示文檔信息
for /f "delims=" %%a in (FilesPath3.txt) do echo.%%a # 顯示文檔內所有行信息; for /f "delims= skip=12" %%a in (FilesPath3.txt) do echo.%%a# 從第12行開始顯示4. continue 和 break
利用 goto 實現程序中常用的 continue 和 break 命令
ontinue: 在 for 循環的最后一行寫上一個標簽,跳轉到這位置即可
break: 在 for 循環的外面的下一句寫上一個標簽,跳轉到這位置即可
demo
4> 其他相關常用命令
1. 路徑相關
| 當前盤符 | %~d0 | |
| 當前路徑 | %cd% | 表示執行命令時所在的目錄;可以改變的,因為它表示的是當前目錄,如果在批處理中使用了cd命令就會改變他的值 |
| 當前執行命令行 | %0 | |
| 當前bat文件路徑 | %~dp0 | 表示批處理文件所在的目錄;是在執行某個批處理結束之前是不會改變的,因為代表的是腳本文件在磁盤的位置 |
| 當前bat文件短路徑 | %~dp0 |
demo
echo %~d0 echo %cd% echo %0 echo %~dp0 echo %~dp0 cd /d %~dp0 pause =================== C: 當前盤符 C:\Users\CHH_PC\Desktop\test 當前路徑 "C:\Users\CHH_PC\Desktop\test\test.bat" 當前執行命令行 C:\Users\CHH_PC\Desktop\test\ 當前bat文件路徑 C:\Users\CHH_PC\Desktop\test\ 當前bat文件短路徑 請按任意鍵繼續.查詢上級目錄可以 cd 再看 %~dp0 信息,這些都會與dir 等命令配合使用;
@echo off cd /d %~dp0 ::顯示當前路徑 echo %cd% cd .. ::顯示上級目錄路徑 echo %cd% pause2. 傳參相關
%[1-9]表示參數,參數是指在運行批處理文件時在文件名后加的以空格(或者Tab)分隔的字符串。
變量可以從%0到%9,%0表示批處理命令本身,其它參數字符串用 %1 到 %9 順序表示。
Sample:
call test2.bat “hello” “haha” (執行同目錄下的“test2.bat”文件,并輸入兩個參數)
在“test2.bat”文件里寫:
echo %1 (打印: “hello”)
echo %2 (打印: “haha”)
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)
3,字符串處理
A: 分割
%源字符串:~起始值,截取長度% (起始值從0開始;截取長度是可選的,如果省略逗號和截取長度,將會從起始值截取到結尾;
截取長度如果是負數,表示截取到倒數第幾個。)
“%time%” 顯示如:“11:04:23.03” (完整的時間"hh:mm:ss.tt")
“%time:~0,5%” 顯示"hh:mm"(即"11:04"),其中0表示從右向左移位操作的個數,5表示從左向右移位操作的個數
“%time:~0,8%” 顯示標準時間格式"hh:mm:ss"(即"11:04:23",前8個字符串)
"%time:~3,-3%“顯示"mm:ss”(即從第4個開始,截去最后3個的字符串)
“%time:~3%” 顯示"04:23.03"(即去掉前4個字符串)
“%time:~-3%” 顯示".tt"(即最后3個字符串)
上面的字串分割格式,也可以用于其它地方,如目錄路徑:“%cd:~0,10%”
@echo off echo %cd% echo %cd:~0,5% echo %cd:~0,8% echo %cd:~3,-3% echo %cd:~3% echo %cd:~-3% pause ============= C:\Users\CHH_PC\Desktop\test C:\Us C:\Users Users\CHH_PC\Desktop\t Users\CHH_PC\Desktop\test est 請按任意鍵繼續. . .B: 替換
@echo off set a="C:\Users\CHH_PC\Desktop\test" set path1=%a:\=&% echo %path1% pause ==================== # 替換\ 為& 符號 "C:&Users&CHH_PC&Desktop&test" 請按任意鍵繼續. . .C:拼接
由于沒有直接的字符串合并函數,只能用笨方法
@echo off set a=C:\Userst set b=\CHH_PC\ set c=Desktop\ set d=test set str1=%a%%b%%c%%d% echo %str1% pause ============ C:\Userst\CHH_PC\Desktop\test 請按任意鍵繼續. . .D: 計算長度
沒有現成的函數。如下程序利用 goto形成循環,不斷將字符串截短1,并記錄截短的次數,到字符串變成空時的次數即長度;
@echo off setlocal enabledelayedexpansion if exist report.txt del report.txt set line=0 for /f "tokens=* delims=" %%a in (new.txt) do ( set var=%%a set /a line+=1 set num=0 call :loop echo !line! >> report.txt ) :loop if not "!var!"=="" ( set /a num+=1 set var=!var:~1! goto loop ) else ( goto :eof ) pause =======================1 . . . 15E: 截取字符,傳遞參數
@echo off set ifo=abcdefghijklmnopqrstuvwxyz0123456789 echo %ifo% echo ============================== echo first 5 char echo %ifo:~0,5% echo lastest 5 char echo %ifo:~-5% echo from first to lastest 5 char echo %ifo:~0,-5% echo from fourth ,long 5 echo %ifo:~3,5% echo from start at lastest 14 char ,long 5 echo %ifo:~-14,5% pause ==========================abcdefghijklmnopqrstuvwxyz0123456789 ============================== first 5 char abcde lastest 5 char 56789 from first to lastest 5 char abcdefghijklmnopqrstuvwxyz01234 from fourth ,long 5 defgh from start at lastest 14 char ,long 5 wxyz0 請按任意鍵繼續. . .4. set 命令
A: set 賦值
等號兩邊不要有空格
變量值包含特殊字符需用雙引號
避免使用系統環境變量同名的自定義變量;如:path , date , errorlevel 等
語法可行但不推薦使用,set /a x=y=100;set /a x=1,y=2
B: set /p 讀取輸入
交互獲取用戶輸入
讀取文件的內容
輸出是否回車
@echo off for %%i in (aas aa zx aasc) do ( set /p =%%i ) pause ================ aas aa zx aasc 請按任意鍵繼續. . . @echo off for %%i in (aas aa zx aasc) do ( set /p =%%i<nul ) pause ================ aasaazxaasc請按任意鍵繼續. .C: set /a 數學運算
等號右側的變量可以省略百分號
@echo off set x=99 set y=100 set /a n=%x%+%y% # 等價set /a n=x+y echo %n% pause ====================== 199 請按任意鍵繼續. .八進制和十六進制轉換成十進制
@echo off set /a m=012 set /a n=0xA echo %m% %n% pause ============== 10 10 請按任意鍵繼續. . .BAT文件里面進行“取余”操作的時候需要使用兩個百分號
@echo off set /a m=10%%3 echo %m% pause ================= 1 請按任意鍵繼續. . .邏輯運算的特殊字符需要使用雙引號
@echo off set /a "m=1<<10" set /a n=1"<<"10 echo %m% %n% pause不支持直接計算超大數(例如磁盤空間的計算)
不支持直接計算浮點數
/A 命令行開關指定等號右邊的字符串為被評估的數字表達式。該表達式
評估器很簡單并以遞減的優先權順序支持下列操作:
| () | 分組 |
| ! ~ - | 一元運算符 |
| “* / %” | 算數運算符 |
| “+ -” | 算數運算符 |
| << >> | 二進制邏輯移位 |
| - | 二進制按位“與” |
| ^ | 二進制按位“異” |
| I | 二進制按位“或” |
| = *= /= %= += -= | 算數賦值 |
| = ^= | = <<= >>= |
| , | 表達式分隔符 |
D: set 字符截取& 替換
set str=字符串 ,其方法和上面截取字符,傳遞參數 一致E: set 賦值變量
F: set 字符開頭變量
直接執行 set 命令可以顯示系統環境變量
命令 set xxx 可以顯示所有以 xxx 開頭的變量
顯示結果按照變量名進行排序
5. ping 命令
用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS][-r count] [-s count] [[-j host-list] | [-k host-list]][-w timeout] [-R] [-S srcaddr] [-c compartment] [-p][-4] [-6] target_name選項:-t Ping 指定的主機,直到停止。若要查看統計信息并繼續操作,請鍵入 Ctrl+Break;若要停止,請鍵入 Ctrl+C。-a 將地址解析為主機名。-n count 要發送的回顯請求數。-l size 發送緩沖區大小。-f 在數據包中設置“不分段”標記(僅適用于 IPv4)。-i TTL 生存時間。-v TOS 服務類型(僅適用于 IPv4。該設置已被棄用,對 IP 標頭中的服務類型字段沒有任何影響)。-r count 記錄計數躍點的路由(僅適用于 IPv4)。-s count 計數躍點的時間戳(僅適用于 IPv4)。-j host-list 與主機列表一起使用的松散源路由(僅適用于 IPv4)。-k host-list 與主機列表一起使用的嚴格源路由(僅適用于 IPv4)。-w timeout 等待每次回復的超時時間(毫秒)。-R 同樣使用路由標頭測試反向路由(僅適用于 IPv6)。根據 RFC 5095,已棄用此路由標頭。如果使用此標頭,某些系統可能丟棄回顯請求。-S srcaddr 要使用的源地址。-c compartment 路由隔離艙標識符。-p Ping Hyper-V 網絡虛擬化提供程序地址。-4 強制使用 IPv4。-6 強制使用 IPv6。demo
ping 192.168.16.108 -4 -t ========================= 來自 192.168.16.108 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.16.108 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.16.108 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.16.108 的回復: 字節=32 時間<1ms TTL=64192.168.16.108 的 Ping 統計信息:數據包: 已發送 = 6,已接收 = 6,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位):最短 = 0ms,最長 = 0ms,平均 = 0ms Control-C6. shutdown命令
用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f][/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]===============================/? 顯示幫助。這與不鍵入任何選項是一樣的。 /i 顯示圖形用戶界面(GUI)。這必須是第一個選項。 /l 注銷。這不能與 /m 或 /d 選項一起使用。 /s 關閉計算機。 /sg 關閉計算機。在下一次啟動時,如果啟用了自動重啟登錄,則將自動登錄并鎖定上次交互登錄后,重啟任何已注冊的應用程序。 /r 完全關閉并重啟計算機。 /g 完全關閉并重啟計算機。重新啟動系統后,如果啟用了自動重啟登錄,則將自動登錄并鎖定上次交互用戶。登錄后,重啟任何已注冊的應用程序。 /a 中止系統關閉。這只能在超時期間使用。與 /fw 結合使用,以清除任何未完成的至固 /p 關閉本地計算機,沒有超時或警告。可以與 /d 和 /f 選項一起使用。 /h 休眠本地計算機。可以與 /f 選項一起使用。 /hybrid 執行計算機關閉并進行準備以快速啟動。必須與 /s 選項一起使用。 /fw 與關閉選項結合使用,使下次啟動轉到固件用戶界面。 /e 記錄計算機意外關閉的原因。 /o 轉到高級啟動選項菜單并重新啟動計算機。必須與 /r 選項一起使用。 /m \\computer 指定目標計算機。 /t xxx 將關閉前的超時時間設置為 xxx 秒。有效范圍是 0-315360000 (10 年),默認值為如果超時期限大于 0,則 /f 參數為/f 參數。 /c "comment" 注釋重啟或關閉的原因。最多允許 512 個字符。 /f 強制關閉正在運行的應用程序而不事先警告用當大于 0 的值為 ,隱含 /f 參數 則默示為 /f 參數。 /d [p|u:]xx:yy 提供重新啟動或關閉的原因。p 指示重啟或關閉是計劃內的。u 指示原因是用戶定義的。如果未指定 p 和 u,則 啟動或關閉 是計劃外的。xx 是主要原因編號(小于 256 的正整數)。yy 是次要原因編號(小于 65536 的正整數)。7. choice 命令
choice 使用此命令可以讓用戶輸入一個字符(用于選擇),從而根據用戶的選擇返回不同的 errorlevel,
然后配合 if errorlevel 選擇運行不同的命令。
注意:choice命令為DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。
choice 使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。
使用時應該加/c:參數,c:后應寫提示可輸入的字符,之間無空格。它的返回碼為1234……
Sample: choice /c:dme defrag,mem,end
將顯示: defrag,mem,end[D,M,E]?
Sample:
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (應先判斷數值最高的錯誤碼)
if errorlevel 2 goto mem
if errotlevel 1 goto end
四:題外話
1> call 文件的相互傳參
test.bat
@echo off setlocal enabledelayedexpansion set x=%1% set y=%2% set /a M=%x%+%y% echo %M% echo call test1.bat %M% call test1.bat %M% pausetest1.bat
@echo off set input=%1% echo it is test running number %input%! pause 輸出: C:\Users\CHH_PC\Desktop\test>test.bat 1,2 3 call test1.bat 3it is test running number 3 請按任意鍵繼續. . . 請按任意鍵繼續. .2> setlocal enabledelayedexpansion 含義
設置本地為延遲擴展。其實也就是:延遲變量,全稱"延遲環境變量擴展",
在cmd執行命令前會對腳本進行預處理,其中有一個過程是變量識別過程,在這個過程中,如果有兩個%括起來的如%value%類似這樣的變量,就會對其進行識別,并且查找這個變量對應的值,再而將值替換掉這個變量,這個替換值的過程,就叫做變量擴展,然后再執行命令。
3> bat 批示處理詳解-2
https://blog.csdn.net/weixin_42914706/article/details/125961200
總結
以上是生活随笔為你收集整理的bat 批示处理详解-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解Instant类
- 下一篇: FOFA常用搜索语法