萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 電腦入門

DOS 批次處理特殊符號完整對照表與實戰用法

核心特殊符號功能對照

符號名稱核心功能典型用法
" "雙引號字串定界符,允許路徑/參數包含空格;在 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 & b
echo 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 進階解析選項

for /f "options" %%i in ('command' / "file" / "string") do command

關鍵選項:
  "usebackq"        反引號 ` ` 視為命令,雙引號 " " 視為檔案/字串 (推薦統一風格)
  "tokens=1,3*"     提取第 1,3 欄位及剩餘全部
  "delims=,;"       自訂分隔符 (預設空白/Tab)
  "skip=2"          跳過前 2 行
  "eol=#"           忽略以 # 開頭的行 (註解)

實戰範例:解析 CSV、處理含空格路徑、多命令鏈

@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 解析選項,是撰寫健壯、可維護批次腳本的基石。建議列印對照表貼於工作站旁。

copyright © 萬盛學電腦網 all rights reserved