Windows BAT獲取開始菜單路徑和桌面路徑的實現(xiàn)
有時候在bat批處理中需要向 開始菜單、 桌面、 任務欄添加文件夾/文件/快捷方式等,這就需要先獲取到對應的路徑。
這篇文章將總結如何在bat批處理中獲取 開始菜單、 桌面、 任務欄的絕對路徑。
一、解決方案
方案1:通過環(huán)境變量獲取
@echo off :: 獲取當前用戶Desktop路徑 set desk_path=%USERPROFILE%\Desktop echo desk_path=%desk_path% :: 獲取當前用戶Start Menu路徑 set sm_path=%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu ::set sm_path=%APPDATA%\Microsoft\Windows\Start Menu echo sm_path=%sm_path% :: 獲取當前用戶TaskBar路徑 set tb_path=%USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar ::set tb_path=%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar echo tb_path=%tb_path% :: 獲取公共用戶Desktop路徑 set com_dp_path=%PUBLIC%\Desktop ::set com_dp_path=C:\Users\Public\Desktop echo com_dp_path=%com_dp_path% :: 獲取公共用戶Start Menu路徑 set com_sm_path=%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs ::set com_sm_path=%ProgramData%\Microsoft\Windows\Start Menu\Programs ::set com_sm_path=C:\ProgramData\Microsoft\Windows\Start Menu\Programs echo com_sm_path=%com_sm_path% :: 沒有公共用戶TaskBar這個概念
輸出結果:
desk_path=C:\Users\cyinl\Desktop
sm_path=C:\Users\cyinl\AppData\Roaming\Microsoft\Windows\Start Menu
tb_path=C:\Users\cyinl\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
com_dp_path=C:\Users\Public\Desktop
com_sm_path=C:\ProgramData\Microsoft\Windows\Start Menu\Programs
方案2:通過注冊表獲取
@echo off :: 獲取當前用戶Desktop路徑 ::REG_SZ set desk_rq=REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop" for /F "tokens=3,*" %%d in ('%desk_rq%') do set desk_path=%%d %%e echo desk_path=%desk_path% ::REG_EXPAND_SZ set desk_rq_ex=REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Desktop" for /F "tokens=3,*" %%d in ('%desk_rq_ex%') do set desk_path_ex=%%d %%e echo desk_path_ex=%desk_path_ex% :: 獲取當前用戶Start Menu路徑 ::REG_SZ set sm_rq=REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Start Menu" for /F "tokens=4,*" %%d in ('%sm_rq%') do set sm_path=%%d %%e echo sm_path=%sm_path% ::REG_EXPAND_SZ set sm_rq_ex=REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Start Menu" for /F "tokens=4,*" %%d in ('%sm_rq_ex%') do set sm_path_ex=%%d %%e echo sm_path_ex=%sm_path_ex% :: 用戶TaskBar路徑,未注冊到注冊表 :: 獲取公共用戶Desktop路徑 ::REG_SZ set com_desk_rq=REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Desktop" for /F "tokens=4,*" %%d in ('%com_desk_rq%') do set com_desk_path=%%d %%e echo com_desk_path=%com_desk_path% ::REG_EXPAND_SZ set com_desk_rq_ex=REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Desktop" for /F "tokens=4,*" %%d in ('%com_desk_rq_ex%') do set com_desk_path_ex=%%d %%e echo com_desk_path_ex=%com_desk_path_ex% :: 獲取公共用戶Start Menu路徑 ::REG_SZ set com_sm_rq=REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Start Menu" for /F "tokens=5,*" %%d in ('%com_sm_rq%') do set com_sm_path=%%d %%e echo com_sm_path=%com_sm_path% ::REG_EXPAND_SZ set com_sm_rq_ex=REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Start Menu" for /F "tokens=5,*" %%d in ('%com_sm_rq_ex%') do set com_sm_path_ex=%%d %%e echo com_sm_path_ex=%com_sm_path_ex% echo ----------------------------------------- ::上述提取的路徑,末尾都帶有一個空格,(如果有必要)可以通過下述方法刪除 set desk_path_ex=%desk_path_ex:~0,-1% ::將可擴展的路徑,轉為直接路徑,以 desk_path_ex 為例 for /F "tokens=*" %%d in ('echo %desk_path_ex%') do set dpx_path=%%d echo %desk_path_ex%=%dpx_path%
輸出結果:
desk_path=C:\Users\cyinl\Desktop
desk_path_ex=%USERPROFILE%\Desktop
sm_path=C:\Users\cyinl\AppData\Roaming\Microsoft\Windows\Start Menu
sm_path_ex=%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu
com_desk_path=C:\Users\Public\Desktop
com_desk_path_ex=%PUBLIC%\Desktop
com_sm_path=C:\ProgramData\Microsoft\Windows\Start Menu
com_sm_path_ex=%ProgramData%\Microsoft\Windows\Start Menu
-----------------------------------------
%USERPROFILE%\Desktop=C:\Users\cyinl\Desktop
二、總結
一般情況下,方案一就可以滿足需求了,但是有特殊情況,比如有極個別用戶對桌面或開始菜單做了重定向,那么方案1可能就不可行了。這時,方案2就派上用場了。
注冊表 ROOTKEY,當前用戶對應HKCU(HKEY_CURRENT_USER),公共用戶對應HKLM(HKEY_LOCAL_MACHINE);
注冊表Shell Folders 項下的路徑都是直接路徑(不含變量);User Shell Folders項下的路徑都是擴展路徑(含變量);
關鍵代碼解讀:
通用格式如下:
for /F "tokens=3,*" %%d in ('reg_query_command_str') do set path_value=%%d %%e
1)"tokens=3,*"部分。如果待查詢的值名稱含有n個空格,則需3需替換為3+n,比如:查公共用戶開始菜單路徑時,值名稱Common Start Menu含有2個空格,則"tokens=5,*";
2)path_value=%%d %%e部分。需要把*提取到的部分(即%%e)拼接上,如果不拼接,遇到含有空格的路徑,則第一個空格后的部分將丟失。比如:查詢公共用戶開始菜單路徑時,路徑為%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu,如果不拼接上%%e,則獲取到的路徑為%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start,這樣就有問題了;
補充說明:
1)如果有需要去除提取的路徑末尾的一個空格,可以參考如下方式:
set desk_path_ex=%desk_path_ex:~0,-1%
2)將擴展路徑轉為直接路徑,可參考如下方式:
for /F "tokens=*" %%d in ('echo %desk_path_ex%') do set dpx_path=%%d
獲取任務欄路徑的方式,只能通過方案1,因為任務欄路徑未注冊到注冊表。
到此這篇關于Windows BAT獲取開始菜單路徑和桌面路徑的實現(xiàn)的文章就介紹到這了,更多相關BAT獲取路徑內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用 windows bat 腳本命令一鍵啟動MySQL服務的方法
這篇文章主要介紹了使用 windows bat 腳本命令 一鍵啟動MySQL服務的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10批處理備份文件夾和文件后發(fā)布文件夾至網(wǎng)站
使用批處理備份文件夾和文件后再把備份的文件夾發(fā)布出去(例如:網(wǎng)站),對批處理感興趣的朋友可以參考下啊,或許對你學習批處理有所幫助2013-02-02用批處理實現(xiàn)的創(chuàng)建帶日期的文件夾的代碼
我想用批處理創(chuàng)建一個帶日期的文件夾,比如:照片200809 其中“照片”是特定的字符,"200809” 系統(tǒng)的當前年份和朋份2010-11-11使用bat腳本在當前文件夾內創(chuàng)建文件或文件夾的快捷方式
在windows中,使用bat腳本在當前文件夾內創(chuàng)建文件或文件夾的快捷方式,修改REM注釋部分的值,可自定義快捷鍵的名稱和指向目標,經腳本之家小編測試沒問題2024-05-05