在 Windows 的命令提示字元(CMD)中,處理字串大小寫轉換一直都很麻煩。這裡記錄幾種常見的做法。
使用批次檔的字串替換功能
這是最陽春但不需要外部工具的方法。原理是利用批次檔的字串替換功能,把 A 換成 a,B 換成 b,以此類推。你需要寫一個迴圈或是列出所有英文字母。這種方式執行速度最慢,程式碼也最長。
程式碼片段
@echo off
set "string=Hello World"
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
call set string=%%string:%%i=%%i%%
)
echo %string%
借用 PowerShell 處理
現在的 Windows 都有內建 PowerShell。在 CMD 裡面直接調用 PowerShell 的字串處理函式是最快的方法。你可以用一聲令下完成轉換。這對寫簡單腳本的人來說最方便。
程式碼片段
for /f "usebackq delims=" %%i in (`powershell -command "'%string%'.ToLower()"`) do set "lower_string=%%i"
echo %lower_string%
透過 PATH 變數的特性
這是一個很邪門但很有趣的技巧。在 CMD 裡,環境變數 PATH 的內容通常會被系統自動處理。如果把變數內容暫時當作路徑來處理,有時候能達到效果。但這個方法不穩定,且容易出錯。我不建議在正式環境使用。
使用外部工具或 WSL
如果你有安裝 Git for Windows,裡面附帶的轉換工具可以直接拿來用。像是 tr 指令。或是如果你有啟動 WSL(Windows 子系統 Linux),也可以透過 wsl 指令傳遞字串處理。
程式碼片段
echo Hello World | wsl tr "[:upper:]" "[:lower:]"
Access Python
code:
for /f "delims=" %i in ('python -c "print('%from_var%'.lower())"') do set to_var=%i
from_var 內容變小寫後, 執行指令 set to_var=新內容
for /f 是批次檔裡最強大也最複雜的指令。它主要用來拆解字串、讀取檔案內容或是處理指令的輸出結果。你可以把它想像成一個簡單的文字解析器。
讀取檔案內容
這是最基本的用法。它會逐行讀取文字檔。預設會以空白或 Tab 當作分隔符號,並只取每一行的第一個區段。如果你想讀取整行,就必須調整參數。
程式碼片段
for /f "delims=" %%i in (test.txt) do (
echo %%i
)
處理指令輸出結果
如果你想抓取某個指令執行的結果並存進變數,就要用單引號把指令包起來。這在自動化腳本中非常常用。例如抓取目前的日期或路徑。
程式碼片段
for /f "delims=" %%i in ('dir /b *.txt') do (
echo 找到檔案:%%i
)
解析特定欄位
利用 tokens 和 delims 參數,你可以精準抓取字串中的某個部分。delims 用來定義切割符號,tokens 則決定要取第幾個區段。
程式碼片段
@echo off
set "str=2026/01/03"
for /f "tokens=1,2,3 delims=/" %%a in ("%str%") do (
echo 年:%%a
echo 月:%%b
echo 日:%%c
)
常用參數說明
skip 用於跳過檔案開頭的前幾行。eol 則用來指定註解符號,遇到該符號開頭的行就會直接忽略。usebackq 則是在路徑包含空白或需要使用後引號執行指令時才會用到。