撰寫綠色軟體安裝腳本 (.bat) 時,常面臨「以系統管理員執行後工作目錄變成 System32」與「需跨目錄複製檔案」兩大挑戰。善用 %~dp0 與環境變數即可優雅解決。
右鍵「以系統管理員身分執行」批次檔時,預設工作目錄會變為 C:\Windows\System32,導致相對路徑失效。
cd /d %~dp0 強制切回腳本所在目錄@echo off
cd /d %~dp0
rem 此處 %~dp0 會展開為批次檔所在完整路徑 (含結尾反斜線)
rem 後續所有相對路徑皆以此為基準
@echo off
cd /d %~dp0
rem 結束 explorer 以釋放檔案鎖定
taskkill /f /im explorer.exe
rem 複製 IME 檔案至系統目錄 (需管理員權限)
copy 6.6.0.9394\SogouPy.ime %WINDIR%\System32\SogouPy.ime
copy 6.6.0.9394\SogouTSF.dll %WINDIR%\System32\SogouTSF.dll
rem 複製使用者設定檔至 AppData
copy env.ini %UserProfile%\AppData\LocalLow\SogouPY\env.ini
rem 重新啟動 explorer
start %WINDIR%\explorer.exe
| 變數 | 典型路徑範例 | 用途 |
|---|---|---|
%WINDIR% | C:\Windows | 系統目錄根路徑 |
%SystemRoot% | C:\Windows | 同 WINDIR |
%ProgramFiles% | C:\Program Files | 64-bit 程式安裝目錄 |
%ProgramFiles(x86)% | C:\Program Files (x86) | 32-bit 程式安裝目錄 |
%UserProfile% | C:\Users\Username | 當前使用者設定檔根目錄 |
%AppData% | C:\Users\Username\AppData\Roaming | 漫遊資料 |
%LocalAppData% | C:\Users\Username\AppData\Local | 本機資料 |
%TEMP% | C:\Users\Username\AppData\Local\Temp | 暫存檔目錄 |
%~dp0 取得批次檔目錄 (含尾隨 \)%~f0 取得批次檔完整路徑%~n0 取得批次檔檔名 (不含副檔名)"%~dp0"