| 符號 | 名稱 | 核心功能 | 典型用法 |
|---|---|---|---|
" " | 雙引號 | 字串定界符,允許路徑/參數包含空格;在 FOR /F 中將內容視為字串而非檔案/命令 | cd "Program Files" for /f "tokens=*" %i in ('command') do @echo %i |
' ' | 單引號 | FOR /F 中將內容視為**命令**執行並捕獲輸出 | for /f %i in ('dir /b') do @echo %i |
` ` | 反引號 | FOR /F usebackq 選項下視為命令 (舊版相容) | for /f "usebackq" %i in (`dir /b`) do @echo %i |
^ | 插入號 | **跳脫字元**:使下一個特殊字元失去特殊含義 (如 ^& ^| ^> ^< ^" ^^);行尾續行 | echo a ^& b 輸出 a & becho line1 ^\nline2 |
& | AND | 命令分隔:順序執行多條命令,無視前一條結果 | cmd1 & cmd2 & cmd3 |
&& | 條件 AND | 前一條**成功** (ERRORLEVEL 0) 才執行後一條 | cd target_dir && do_work.bat |
|| | 條件 OR | 前一條**失敗** (ERRORLEVEL ≠ 0) 才執行後一條 | mkdir dir 2>nul || echo 目錄已存在 |
| | 管線 | 前一命令標準輸出傳遞給後一命令標準輸入 | dir | find "txt" |
> | 輸出重導向 | 覆寫輸出至檔案 (1> 標準輸出, 2> 錯誤輸出) | dir > list.txt cmd 2>error.log |
>> | 附加重導向 | 追加輸出至檔案末尾 | echo log >> log.txt |
< | 輸入重導向 | 從檔案讀取標準輸入 | sort < unsorted.txt |
% | 百分號 | 批次檔中變數參考 (%1~%9 參數, %var% 環境變數, %%i FOR 迴圈變數) | echo %PATH% for %%i in (*.txt) do echo %%i |
! | 驚嘆號 | **延遲環境變數擴充** (setlocal enabledelayedexpansion 後使用 !var!) | 迴圈內即時讀取變數變化 |
~ | 波浪號 | 變數子字串/路徑修飾符 (%~dp0 批次檔目錄, %~n1 檔名不含副檔名) | %~f1 完整路徑, %~z1 檔案大小 |
: | 冒號 | 標籤 (:label 配合 goto label)、變數修飾前綴 | :loop ... goto loop |
; , | 分號/逗號 | 某些命令參數分隔符 (如 for /f "tokens=1,2 delims=,") | delims=,; |
() | 括號 | 命令群組化 (跨行複合命令)、FOR 迴圈集合 | (echo a & echo b) > out.txt |
* ? | 萬用字元 | 檔名比對:* 任意字元,? 單一字元 | del *.tmp dir ???.log |
@ | At 符號 | 批次檔行首抑制回顯該行命令 | @echo off |
REM 三種進入 "Program Files" 的等效寫法 cd "Program Files" cd Progra~1 REM 8.3 短檔名 (不保證存在) cd Pro* REM 萬用字元匹配 (風險:可能匹配多個目錄) REM 複雜路徑最佳實踐 set "TARGET=C:\Documents and Settings\All Users\Application Data\MyApp" cd /d "%TARGET%"
for /f "options" %%i in ('command' / "file" / "string") do command
關鍵選項:
"usebackq" 反引號 ` ` 視為命令,雙引號 " " 視為檔案/字串 (推薦統一風格)
"tokens=1,3*" 提取第 1,3 欄位及剩餘全部
"delims=,;" 自訂分隔符 (預設空白/Tab)
"skip=2" 跳過前 2 行
"eol=#" 忽略以 # 開頭的行 (註解)
@echo off
setlocal enabledelayedexpansion
REM 1. 解析 CSV (逗號分隔,欄位可能含引號)
for /f "usebackq tokens=1-3 delims=," %%a in ("data.csv") do (
echo 欄位1=%%a 欄位2=%%b 欄位3=%%c
)
REM 2. 遞迴處理含空格路徑下的所有 .log 檔
for /r "C:\Program Files\MyApp\Logs" %%f in (*.log) do (
echo 處理: "%%f"
type "%%f" | find "ERROR" >> "C:\Temp\errors_summary.log"
)
REM 3. 命令鏈:建立目錄並複製,失敗則報警
md "D:\Backup\%date:~-4,4%%date:~-10,2%%date:~-7,2%" 2>nul && (
xcopy "C:\Source\*" "D:\Backup\%date:~-4,4%%date:~-10,2%%date:~-7,2%\" /E /Y /I
) || (
echo 備份失敗! & pause
)
REM 要輸出字面字串 "a > b & c | d" echo a ^> b ^& c ^| d REM 管線中傳遞特殊字元給 findstr echo "test^|pipe" | findstr "\^|"
熟記符號語義、跳脫規則、FOR /F 解析選項,是撰寫健壯、可維護批次腳本的基石。建議列印對照表貼於工作站旁。