首页 > 其他分享 >BAT获取开始菜单路径和桌面路径

BAT获取开始菜单路径和桌面路径

时间:2023-11-08 17:00:11浏览次数:46  
标签:BAT set 开始菜单 %% 路径 sm desk path com

Windows BAT获取开始菜单路径和桌面路径的实现

 更新时间:2023年07月11日 11:42:02   作者:小青龍     本文将总结如何在bat批处理中获取 开始菜单、 桌面、 任务栏的绝对路径,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧   −
目录

有时候在bat批处理中需要向 开始菜单、 桌面、 任务栏添加文件夹/文件/快捷方式等,这就需要先获取到对应的路径。
这篇文章将总结如何在bat批处理中获取 开始菜单、 桌面、 任务栏的绝对路径。

一、解决方案

方案1:通过环境变量获取

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @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:通过注册表获取

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 @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项下的路径都是扩展路径(含变量);

关键代码解读:

通用格式如下:

?
1 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)如果有需要去除提取的路径末尾的一个空格,可以参考如下方式:

?
1 set desk_path_ex=%desk_path_ex:~0,-1%
 

2)将扩展路径转为直接路径,可参考如下方式:

?
1 for /F "tokens=*" %%d in ('echo %desk_path_ex%') do set dpx_path=%%d
 

获取任务栏路径的方式,只能通过方案1,因为任务栏路径未注册到注册表。

到此这篇关于Windows BAT获取开始菜单路径和桌面路径的实现的文章就介绍到这了,更多相关BAT获取路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

 

出处:https://www.jb51.net/jiaoben/2918104vw.htm

标签:BAT,set,开始菜单,%%,路径,sm,desk,path,com
From: https://www.cnblogs.com/mq0036/p/17817805.html

相关文章

  • 2023-11-08 Android studio下载的模拟器存放路径以及如何修改存放路径 ==》默认路径:C:
    模拟器存放默认路径:C:\Users\Administrator\.android\avd如何修改:设置一个系统变量,如图,点击Help==》EditCustomProperties 然后再弹出的文本框里输入你要存放的路径,比如我存在D盘的adv文件夹里面ANDROID_AVD_HOME=D:\\adv 我的as版本:2022.3.1Patch3 写到最后:c盘......
  • mybatis 多个条件in查询
    1.UI如下,共有四个查询条件,每个查询可以多选,所以考虑用in查询 2.查询DTO类封装如下:@Data@ApiModel(value="整机下市明细信息查询对象")publicclassMachineOffMarketQueryDto{@ApiModelProperty(value="型号编码集合",required=true)@NotEmpty(message="型......
  • FS4054‍‍B输入VIN端输出BAT端带双向7V防浪涌设计5脚充电IC
    这种类型的文章比较特殊,它涉及到电子元器件的应用和设计。根据您提供的信息,我可以为您提供一个大致的文章结构,并为您提供每个部分的内容概述。文章标题:FS4054B输入VIN端输出BAT端带双向7V防浪涌设计5脚充电IC文章开头:介绍FS4054B是一款具有双向7V防浪涌设计的5I脚C充,电在各种恶劣环......
  • 获取文件大小或文件夹的大小和占用空间,以及文件全路径、目录、扩展名、文件名称
    获取文件或文件夹的大小大小是文件夹/文件本身的实际大小,占用空间指的是文件夹/文件在磁盘中所占用的空间的大小。获取指定目录下所有文件的大小1//得到指定目录下的数据量大小2publicstaticlongGetDirectoryLength(stringdirPath)3{......
  • mybatisplus轻松完成一次模糊+分页查询
    之前一直用mybatis+pageinfo完成模糊+分页查询,还需要手写sql语句,之前一直没做尝试,今天试了试mybatisplus一个人完成模糊+分页,挺简单的有一个小插曲是,我的前端接受的data中,data.list变成了data.record,一开始没有查到数据,让我差点怀疑自己哪里写错了,在使用sout的检查中我发现servic......
  • PySpark判断Hdfs文件路径是否存在
    背景从ScalaSpark代码转PySpark代码,同时实现连续读多个文件,避免因某些路径不存在导致程序终止。在Scala的Spark中可以直接导下面两个模块的包importorg.apache.hadoop.conf.Configurationimportorg.apache.hadoop.fs._然后调用方法就可以实现对hdfs的文件判断了valfs=......
  • 解决mybatis嵌套查询使用PageHelper分页不准确
    版权声明:本文为CSDN博主「那只小猿」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_41869361/article/details/116427385springboot项目中嵌套查询使用PageHelper发现使用结果不正确,上PageHelper官网看了一下果然是......
  • Filebat跨公网传输日志
    目录......
  • C#开发的软件在Windows7中出现对路径的访问被拒绝异常
    C#开发的软件在Windows7中出现对路径的访问被拒绝异常在VS2008/VS2010下,右键项目=>属性=>安全性=>直接勾选“启用ClickOnce安全设置”即可解决问题。 创建文件夹和文件时,选择其他盘,比如:D,E,F.不要选择创建到C盘。......
  • 未能注册模块(程序路径)\ieframe.dll提示
    程序安装的时候出现未能注册模块(程序路径)\ieframe.dll提示这种情况的出现,是因为引用的shdocvw.dll,目前发现了一个折中的解决方法,在安装程序里面,可以看到ieframe.dll的一个引用,右击选择排除。这样安装的时候就不会出现这种提示。只要安装的目标机子上有IE6或者IE7,IE8,程序就不会有任......