欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Windows BAT獲取開始菜單路徑和桌面路徑的實(shí)現(xiàn)

 更新時(shí)間:2023年07月11日 11:42:02   作者:小青龍  
本文將總結(jié)如何在bat批處理中獲取 開始菜單、 桌面、 任務(wù)欄的絕對(duì)路徑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

有時(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)文章

最新評(píng)論