有個需求是要用 Batch file 在桌面上建立一些檔案,遍尋不著桌面路徑的環境變數,只好透過其他方式來取得桌面路徑
桌面路徑
正常情況下的桌面路徑應該是 %UserProfile%\Desktop\
,但僅限於英文語系的 Windows,有些語系桌面不是Desktop
,另外像是有些人也會修改系統預設桌面路徑的位置,所以保險的方式應該是要從系統 API 去取得正確的路徑
使用 Regedit 取得桌面路徑
1
2
3
4
|
FOR /f "usebackq tokens=1,2,*" %%B IN (`REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%D
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
|
系統桌面路徑會記錄在 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
裡面,先查詢出 Desktop 的值後再把路徑展開來
使用 Powershell 取得桌面路徑
1
2
3
|
FOR /F "usebackq delims=" %%i in (`powershell -Command "& {[Environment]::GetFolderPath('Desktop')}"`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
|
執行 powershell 命令 [Environment]::GetFolderPath('Desktop')
取得桌面路徑
使用 VBScript 取得桌面路徑
1
2
3
4
5
6
7
8
9
10
|
SET FIND_DESKTOP_SCRIPT=%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs
>"%FIND_DESKTOP_SCRIPT%" (
ECHO set WshShell = WScript.CreateObject^("WScript.Shell"^)
ECHO strDesktop = WshShell.SpecialFolders^("Desktop"^)
ECHO WScript.Echo^(strDesktop^)
)
FOR /F "usebackq delims=" %%i in (`cscript //nologo "%FIND_DESKTOP_SCRIPT%"`) DO SET DESKTOPDIR=%%i
DEL "%FIND_DESKTOP_SCRIPT%"
ECHO %DESKTOPDIR%
|
在 temp 目錄建立一個暫存的 VBScript 檔,用 VBScript 查詢桌面路徑後再刪除,注意輸出 vbs 檔的時候要 escape (
)
字元
Reference