for 迴圈中的 %%~ni、%%~dpi 等神祕符號,官方稱為「變數擴展修飾符」,本文主張稱之為「保留變數資訊」更直觀。透過實作環境與對照表,讓你秒懂每個字母代表的路徑資訊,並掌握自由組合技巧。
@echo off
md d:\temp
cd.>d:\temp\abcd.efgh
start d:\temp
在當前目錄建立 test.bat:
@echo off
for /f %%a in ('dir /s /b a*') do (
echo %%a :檔案完整路徑
echo %%~da :保留磁碟機代號
echo %%~pa :保留路徑(含尾隨斜線)
echo %%~na :保留檔名(無副檔名)
echo %%~xa :保留副檔名(含點號)
echo %%~za :保留檔案大小(位元組)
echo %%~ta :保留修改時間
echo %%~dpa :保留磁碟機+路徑
echo %%~nxa :保留檔名+副檔名
echo %%~pnxa :保留路徑+檔名+副檔名
echo %%~dpna :保留磁碟機+路徑+檔名
echo %%~dpnxa :保留磁碟機+路徑+檔名+副檔名(等同完整路徑)
)
pause > nul
| 字母 | 含義 | 範例輸出 (D:\temp\abcd.efgh) |
|---|---|---|
| d | 磁碟機代號 | D: |
| p | 路徑(含結尾 \) | \temp\ |
| n | 檔名(無副檔名) | abcd |
| x | 副檔名(含 .) | .efgh |
| z | 檔案大小(位元組) | 0 |
| t | 修改日期時間 | 2024-01-15 14:30 |
%%~pnx = %%~xpn。%%~dp0(批次檔所在目錄)、%%~nxa(純檔名)、%%~dpa(目錄路徑)。for /r 遞迴或 for /f 解析文字時同樣適用。@echo off
echo 批次檔完整路徑:%~f0
echo 批次檔所在目錄:%~dp0
echo 批次檔檔名:%~nx0
pause
掌握修飾符,路徑拆解組裝不再需要呼叫外部工具,批次檔處理檔案系統任務效率大增。