Windows BAT獲取開始菜單路徑和桌面路徑的實(shí)現(xiàn)
有時(shí)候在bat批處理中需要向 開始菜單、 桌面、 任務(wù)欄添加文件夾/文件/快捷方式等,這就需要先獲取到對(duì)應(yīng)的路徑。
這篇文章將總結(jié)如何在bat批處理中獲取 開始菜單、 桌面、 任務(wù)欄的絕對(duì)路徑。
一、解決方案
方案1:通過環(huán)境變量獲取
@echo off :: 獲取當(dāng)前用戶Desktop路徑 set desk_path=%USERPROFILE%\Desktop echo desk_path=%desk_path% :: 獲取當(dāng)前用戶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% :: 獲取當(dāng)前用戶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這個(gè)概念
輸出結(jié)果:
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:通過注冊(cè)表獲取
@echo off :: 獲取當(dāng)前用戶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% :: 獲取當(dāng)前用戶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路徑,未注冊(cè)到注冊(cè)表 :: 獲取公共用戶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 ----------------------------------------- ::上述提取的路徑,末尾都帶有一個(gè)空格,(如果有必要)可以通過下述方法刪除 set desk_path_ex=%desk_path_ex:~0,-1% ::將可擴(kuò)展的路徑,轉(zhuǎn)為直接路徑,以 desk_path_ex 為例 for /F "tokens=*" %%d in ('echo %desk_path_ex%') do set dpx_path=%%d echo %desk_path_ex%=%dpx_path%
輸出結(jié)果:
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
二、總結(jié)
一般情況下,方案一就可以滿足需求了,但是有特殊情況,比如有極個(gè)別用戶對(duì)桌面或開始菜單做了重定向,那么方案1可能就不可行了。這時(shí),方案2就派上用場(chǎng)了。
注冊(cè)表 ROOTKEY,當(dāng)前用戶對(duì)應(yīng)HKCU(HKEY_CURRENT_USER),公共用戶對(duì)應(yīng)HKLM(HKEY_LOCAL_MACHINE);
注冊(cè)表Shell Folders 項(xiàng)下的路徑都是直接路徑(不含變量);User Shell Folders項(xiàng)下的路徑都是擴(kuò)展路徑(含變量);
關(guān)鍵代碼解讀:
通用格式如下:
for /F "tokens=3,*" %%d in ('reg_query_command_str') do set path_value=%%d %%e
1)"tokens=3,*"部分。如果待查詢的值名稱含有n個(gè)空格,則需3需替換為3+n,比如:查公共用戶開始菜單路徑時(shí),值名稱Common Start Menu含有2個(gè)空格,則"tokens=5,*";
2)path_value=%%d %%e部分。需要把*提取到的部分(即%%e)拼接上,如果不拼接,遇到含有空格的路徑,則第一個(gè)空格后的部分將丟失。比如:查詢公共用戶開始菜單路徑時(shí),路徑為%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu,如果不拼接上%%e,則獲取到的路徑為%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start,這樣就有問題了;
補(bǔ)充說明:
1)如果有需要去除提取的路徑末尾的一個(gè)空格,可以參考如下方式:
set desk_path_ex=%desk_path_ex:~0,-1%
2)將擴(kuò)展路徑轉(zhuǎn)為直接路徑,可參考如下方式:
for /F "tokens=*" %%d in ('echo %desk_path_ex%') do set dpx_path=%%d
獲取任務(wù)欄路徑的方式,只能通過方案1,因?yàn)槿蝿?wù)欄路徑未注冊(cè)到注冊(cè)表。
到此這篇關(guān)于Windows BAT獲取開始菜單路徑和桌面路徑的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)BAT獲取路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用 windows bat 腳本命令一鍵啟動(dòng)MySQL服務(wù)的方法
這篇文章主要介紹了使用 windows bat 腳本命令 一鍵啟動(dòng)MySQL服務(wù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10批處理備份文件夾和文件后發(fā)布文件夾至網(wǎng)站
使用批處理備份文件夾和文件后再把備份的文件夾發(fā)布出去(例如:網(wǎng)站),對(duì)批處理感興趣的朋友可以參考下啊,或許對(duì)你學(xué)習(xí)批處理有所幫助2013-02-02批處理FINDSTR正則表達(dá)式用法實(shí)例分析
dos或批處理下findstr正則用法,會(huì)了這個(gè)我們就可以用批處理實(shí)現(xiàn)文本等搜索替換等2008-08-08用批處理實(shí)現(xiàn)的創(chuàng)建帶日期的文件夾的代碼
我想用批處理創(chuàng)建一個(gè)帶日期的文件夾,比如:照片200809 其中“照片”是特定的字符,"200809” 系統(tǒng)的當(dāng)前年份和朋份2010-11-11使用bat腳本在當(dāng)前文件夾內(nèi)創(chuàng)建文件或文件夾的快捷方式
在windows中,使用bat腳本在當(dāng)前文件夾內(nèi)創(chuàng)建文件或文件夾的快捷方式,修改REM注釋部分的值,可自定義快捷鍵的名稱和指向目標(biāo),經(jīng)腳本之家小編測(cè)試沒問題2024-05-05批處理bat標(biāo)準(zhǔn)化獲取當(dāng)前系統(tǒng)日期的幾種方法
這篇文章主要介紹了批處理bat標(biāo)準(zhǔn)化獲取當(dāng)前系統(tǒng)日期的幾種方法,需要的朋友可以參考下2014-07-07Windows和 Linux下生成以當(dāng)前時(shí)間命名文件的方法
在 Windows、Linux 操作系統(tǒng),分別利用BAT批處理文件和Shell腳本,生成類似“20110228_082905.txt”以“年月日_時(shí)分秒”命名的文件2011-11-11