.bat vs .cmd 差異
.bat:所有 Windows 兼容,ERRORLEVEL 僅錯誤時改變
.cmd:NT 內核優化,啟用擴展時**成功命令也會改變 ERRORLEVEL**
基礎輸出控制
@echo off :: 隱藏命令本身
echo on :: 顯示命令 (默認)
echo. :: 輸出空行 (無空格)
echo message :: 輸出文本
@ :: 行前綴,僅隱藏該行命令
變量作用域:SETLOCAL / ENDLOCAL
@echo off
setlocal
set version=1.0
echo first: %version%
endlocal
echo second: %version% :: 空 (局部變量已銷毀)
set version=2.0 :: 全局變量
echo third: %version% :: 2.0
延遲擴展:ENABLEDELAYEDEXPANSION
@echo off
setlocal EnableDelayedExpansion
set _tst=0
for /l %%G in (1,1,5) do (echo [!_tst!] & set /a _tst+=1)
echo Total = !_tst!
:: 輸出: [0][1][2][3][4] Total = 5
endlocal
關鍵:!var! 替代 %var%,在複合語句 (for/if) 中實時獲取最新值。
脫字符 ^ 與 HTML/XML 處理
setlocal EnableDelayedExpansion
set _html=html format: ^Hello world^
echo !_html! :: 輸出原始標籤,不被解析為重定向
SET 進階用法
| 命令 | 說明 |
| set | 顯示所有環境變量 |
| set prefix | 顯示指定前綴變量 |
| set var=value | 賦值 |
| set /a var=expr | 算術運算 (+ - * / % << >> & | ^) |
| set /p var=prompt | 交互輸入 |
| set "var=" | 刪除變量 |
實用環境變量
%CD% 當前目錄
%DATE% / %TIME% 日期時間
%RANDOM% 0-32767 隨機數
CHOICE 交互選單
CHOICE /C ABC /M "選擇: A-管理員 B-域用戶 C-註冊用戶"
if %errorlevel%==1 goto Admin
if %errorlevel%==2 goto Domain
if %errorlevel%==3 goto Local
參數與文件名擴展
%0 腳本名
%1-%9 參數
%* 所有參數
%~f1 完整路徑
%~d1 驅動器
%~p1 路徑
%~n1 文件名(無擴展名)
%~x1 擴展名
%~s1 短文件名
%~a1 屬性
%~t1 修改時間
%~z1 文件大小
%~dp1 驅動器+路徑
%~nx1 文件名+擴展名
IF 條件判斷
IF [NOT] EXIST file cmd
IF [/I] str1==str2 cmd
IF [/I] str1 compare-op str2 cmd :: EQU NEQ LSS LEQ GTR GEQ
IF [NOT] DEFINED var cmd
IF [NOT] ERRORLEVEL n cmd
IF CMDEXTVERSION n cmd
FOR 循環四大模式
FOR %%G IN (set) DO cmd :: 文件集/字符串
FOR /R [path] %%G IN (set) DO cmd :: 遞歸目錄
FOR /D %%G IN (dirs) DO cmd :: 目錄名
FOR /L %%G IN (start,step,end) DO cmd :: 數字範圍
FOR /F ["opts"] %%G IN (file/string/'cmd') DO cmd :: 文本處理/命令輸出
選項: eol=c skip=n delims=xxx tokens=x,y,m-n usebackq
NET 命令實用場景
| 命令 | 用途 |
| net start/stop/pause/continue svc | 服務管理 |
| net use z: \\server\share pwd /user:dom\user | 映射網絡驅動器 |
| net share | 查看本地共享 |
| net share name=path /grant:user,FULL | 創建共享 |
| net localgroup administrators user /add | 添加管理員 |
| netdom renamecomputer old /newname:new /userd:u /passwordd:p | 重命名計算機 |
| netdom join pc /domain:dom /userd:u /passwordd:p | 加入域 |