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