[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统增强] “打开/另存为”对话框位置栏批处理修改器[2009.3.13更新]

当我们使用诸如记事本、word之类的软件菜单栏里的“打开”或“另存为”按钮的时候,系统会弹出一个对话框让大家定位文件路径。为了快速定位到一些常用的位置,微软在对话框的左侧为大家准备了5个常用路径,分别是:我最近的文档、桌面、我的文档、我的电脑、网上邻居。

  按理说,微软的这个设计是比较贴心的。可是,每个用户都有自己独特的操纵习惯,经常打开的路径是千差万别的,而微软并没有在前台界面开放重设这5个路径的功能,需要通过各种各样的工具软件深入注册表内部做调整。目前网上有这个功能的工具软件较为罕见,于是萌发了用批处理做一个调整“打开/另存为”对话框位置栏工具的念头。经过一番摸索,得到了以下代码,发出来共享之。

  这个批处理具有如下功能:

  1、自行指定“打开/另存为”对话框位置栏的路径;
  2、重新调整自行指定路径的顺序

  使用这个批处理调整前后效果对比:


  支持多种输入方式:


  注意事项:

  1、最多只能修改5个路径;
  2、若系统是XP_SP1或XP_SP2,系统自带的reg.exe在查询中文路径的时候,会出现“吃字”现象,请用附件中的reg.exe替换之,或放在批处理的相同目录下使用;若不知道reg.exe“吃字”是怎么回事,请阅读这篇文章:reg requery查询注册表时中文路径会"吃掉"最后的字符?http://www.cn-dos.net/forum/viewthread.php?tid=22202
  3、代码没有做全面的容错检测,请严格按照提示操作,否则,将不能正确修改路径。
  1. @echo off
  2. :: Code by namejm 2009.3.12 Modified on 2009.3.13
  3. :: 不支持带感叹号的路径
  4. :: 争取对默认设置的次序进行重排
  5. set TT="打开/另存为"对话框位置栏修改器
  6. title %TT%
  7. mode con lines=25 cols=70
  8. setlocal enabledelayedexpansion
  9. set RegPath=HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32
  10. :Main
  11. cls
  12. for /f "delims==" %%i in ('set place 2^>nul') do set "%%i="
  13. set custom=
  14. for /f "skip=4 tokens=1,2*" %%i in ('reg query %RegPath%\Placesbar 2^>nul') do (
  15.     set custom=yes
  16.     set "%%i=%%k"
  17. )
  18. :ShowConfigDefault
  19. title %TT%-默认设置
  20. if not defined custom (
  21.     echo.&echo                     当前使用的是系统默认的设置
  22.     echo  ____________________________________________________________________
  23.     echo.&echo                         位置序号 对应的路径
  24.     echo                    ——————————————
  25.     echo                            1    我最近的文档
  26.     echo                            2    桌面
  27.     echo                            3    我的文档
  28.     echo                            4    我的电脑
  29.     echo                            5    网上邻居
  30.     echo                    ——————————————
  31.     echo                      建议自行设置更合理的位置
  32.     echo.&echo.
  33.     echo.
  34.     echo          退出请按 0                            全新设置请按 1
  35.     echo  ____________________________________________________________________
  36.     echo.
  37.     set choice=
  38.     set /p choice=                      请输入功能代码(0/1):
  39.     if not defined choice (
  40.         goto Main
  41.     ) else (
  42.         if "!choice!"=="0" exit
  43.         if "!choice!"=="1" goto SetNew
  44.     )
  45.     goto ShowConfigDefault
  46. )
  47. :ShowConfigCustom
  48. title %TT%-自定义设置
  49. cls
  50. echo.&echo                     当前使用的是用户自定义设置
  51. echo  ____________________________________________________________________
  52. echo.&echo                         位置序号 对应的路径
  53. echo                  ——————————————————
  54. set num=0
  55. for /f "delims==" %%i in ('set path_ 2^>nul') do set "%%i="
  56. for /f "tokens=1* delims==" %%i in ('set place') do (
  57.     set /a num+=1
  58.     set "path_!num!=%%~j"
  59.     echo                            !num!         "%%~j"
  60. )
  61. echo                  ——————————————————
  62. echo.&echo.&echo.
  63. echo             退出请按 0                      恢复默认设置请 1
  64. echo  ____________________________________________________________________
  65. echo.
  66. echo           调整当前设置的顺序请按 2        重新设置新路径请按 3
  67. echo.
  68. set choice=
  69. set /p choice=                请输入功能代码(0/1/2/3):
  70. if not defined choice (
  71.     goto ShowConfigCustom
  72. ) else (
  73.     if "%choice%"=="0" exit
  74.     if "%choice%"=="1" reg delete %RegPath% /f>nul&goto Main
  75.     if "%choice%"=="2" goto SortConfig
  76.     if "%choice%"=="3" goto SetNew
  77. )
  78. goto ShowConfigCustom
  79. :SortConfig
  80. title %TT%-调整顺序
  81. cls
  82. echo.&echo                              自定义位置的顺序
  83. echo  ____________________________________________________________________
  84. echo.&echo                         位置序号 对应的路径
  85. echo                  ——————————————————
  86. for /f "tokens=2* delims=_=" %%i in ('set path_') do (
  87.     set "str=%%j"
  88.     echo                            %%i     "!str!"
  89. )
  90. echo                  ——————————————————
  91. echo.&echo  ____________________________________________________________________
  92. echo.
  93. echo                若要调整自定义位置的当前顺序,请按照以下步骤操作:
  94. echo.&echo                重新排列 1~%num% 这%num%个数字,并以空格分隔
  95. echo.&echo                重排后的数字顺序就是新的路径顺序
  96. echo.
  97. set order=
  98. set /p order=        请依次输入重排后的数字,并以空格分隔(退出请按0):
  99. if not defined order goto SortConfig
  100. if "%order%"=="0" exit
  101. set /a num1=0
  102. :: 需要对形如 c:\ 的路径做特别处理
  103. for %%i in (%order%) do (
  104.     if %%i gtr %num% goto SortConfig
  105.     set /a num2=%%i-1
  106.     call set "var=%%place!num2!%%"
  107.     if "!var:~-1!"=="\" set "var=!var!\"
  108.     set "str!num1!=!var!"
  109.     set /a num1+=1
  110. )
  111. set /a num-=1
  112. reg delete %RegPath%\Placesbar /f>nul
  113. for /l %%i in (0,1,%num%) do (
  114.     reg add %RegPath%\Placesbar /v place%%i /t REG_SZ /d "!str%%i!">nul
  115. )
  116. echo.&pause
  117. goto Main
  118. :SetNew
  119. title %TT%-指定新路径
  120. cls
  121. reg delete %RegPath% /f>nul 2>nul
  122. echo.&echo                          请指定新的路径
  123. echo  ____________________________________________________________________
  124. echo.&echo        注意事项:
  125. echo                ① 不能输入不存在的路径
  126. echo                ② 若只输入盘符,一定要以两条反斜杠结束,
  127. echo            比如:c:\\
  128. echo                ③ 若输入的是路径,结尾部分不能带任何反
  129. echo            斜杠,比如:c:\test
  130. echo                ④ 最多只能输入5条路径
  131. echo        小技巧:① 可以把文件夹直接拖曳到本窗口
  132. echo                ② 输入的内容可以是类标识符(CLSID),
  133. echo            但是需要在类标识符前加双冒号::
  134. echo         ————————————————————————
  135. echo.
  136. set num=0
  137. for /f "delims==" %%i in ('set str 2^>nul') do set "%%i="
  138. for /l %%i in (1,1,5) do (
  139.     set /p str%%i=        请输入第%%i个路径(直接回车将结束输入):
  140.     if defined str%%i (
  141.         set /a num+=1
  142.         set "str%%i=!str%%i:"=!"
  143.     ) else goto ChangePath
  144. )
  145. :ChangePath
  146. echo  ____________________________________________________________________
  147. set num1=0
  148. for /l %%i in (1,1,%num%) do (
  149.     reg add %RegPath%\Placesbar /v place!num1! /t REG_SZ /d "!str%%i!">nul
  150.     set /a num1+=1
  151. )
  152. echo.&pause
  153. goto Main
复制代码
部分常用类标识符(CLSID):
  1. 我的电脑 {20D04FE0-3AEA-1069-A2D8-08002B30309D}
  2. 我的文档 {450D8FBA-AD25-11D0-98A8-0800361B1103}
  3. 打印机 {2227A280-3AEA-1069-A2DE-08002B30309D}
  4. 网上邻居 {208D2C60-3AEA-1069-A2D7-08002B30309D}
  5. 回收站 {645FF040-5081-101B-9F08-00AA002F954E}
  6. 公文包 {85BBD920-42A0-1069-A2E4-08002B30309D}
  7. 控制面板 {21EC2020-3AEA-1069-A2DD-08002B30309D}
  8. WEB文件夹{BDEADF00-C265-11D0-BCED-00A0C90AB50F}
  9. 历史记录 {FF393560-C2A7-11CF-BFF4-444553540000}
  10. 收藏夹 {1A9BA3A0-143A-11CF-8350-444553540000}
复制代码
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
3

评分人数

尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

下回去研究,谢谢!!!

TOP

支持!!
希望能有更多实用程序发布!!

TOP

◆ 组策略里可以设置 —— 用户配置→管理模板→Windows组件→Windows资源管理器→通用打开文件对话框。

◆ 有个小软件
◆ 输入类标识符,在我这里无效(系统:xp sp2 中文版)。有两个方法添加“我的电脑”等这些,添加下面的英文或里面的 dword 值:
CommonDocuments (2e), CommonMusic (35), CommonPictures (36) , Desktop (0), MyComputer (11), MyDocuments (5), MyFavorites (6), MyMusic (d), MyNetworkPlaces (), MyPictures (27), Printers (4), ProgramFiles (), Recent (8) ...


◆ 运行批处理,我这始终显示:
       位置序号 对应的路径
——————————————————
   1  ""
   2  ""
   3  ""
   4  ""
   5  ""
——————————————————


[ 本帖最后由 tireless 于 2009-3-12 22:41 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

  深度那款软件以前用过,还用过其他几款,以前一直没有找到在哪里修改注册码,这两天在网上无意中发现了这方面的资料,于是就动了写批处理的念头。

  组策略里以前也曾经玩过几次,但是需要层层展开,指指点点,进进出出几次之后,就感到太过繁琐而放弃了。

  添加类标识符需要在前面加上连续的两个半角冒号:: ,忘记说了,马上添加说明。添加dword值的资料也查到了,下一步打算支持这种输入方式。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 5楼 的帖子

使用 RegFromApp 可以很方便地显示出软件对注册表的改动。
1

评分人数

TOP

  显示路径为空的原因是:论坛会把Tab键识别为一般空格,代码复制回去后,还要把第一条for中的Tab字符串替换为一个跳格键。已经在顶楼做了更新说明。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 6楼 的帖子

我一般用RegSnap,呵呵,下次试试你这个。

【分享】
Outlook的“另存为”在注册表的这个地方设置:
  1. reg add "HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Options" /v DefaultPath /t REG_SZ /d "C:\Users\%username%\Desktop" /f
复制代码
Outlook 2016 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Options
Outlook 2013 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\15.0\Outlook\Options
Outlook 2010 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\14.0\Outlook\Options
Outlook 2007 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\12.0\Outlook\Options
Outlook 2003 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\11.0\Outlook\Options
参考:https://www.outlook-tips.net/tips/change-outlooks-open-save-attachments-folder/
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8楼 的帖子

RegFromApp 只要选择要跟踪的程序,然后对这个“程序”进行操作,注册表的改动就会即时显示在 RegFromApp 窗口。而 RegSnap 要生成前后注册表的快照,再比较,这等待的过程太痛苦了...

TOP

回复 6楼 的帖子

RegFromApp 倒没用过。一般是用Filemon+Regmon和RegSnap。以后试试。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 7楼 的帖子

能否尝试在reg query那句中使用其它方法,别用tab呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7楼 的帖子

分隔符是空格或跳格键时无需指定,它们是默认的分隔符集。

论坛把tab转换为8个空格后,可能是由于下面的原因导致楼主的bat出错。

好像是for的一个bug:一般来说,多个相同字符会被当作一个字符(它们不是整体作为分隔符,新手往往问到这个问题)。但如果指定连续多个空格,空格将无法作为分隔符。
补充以前讨论的一个要点:如果分隔符集里面含有空格,空格必须放在最后。
  1. @echo off
  2. for /f "delims=aa" %%a in ("1a2") do echo %%a
  3. rem 下面的“宽空格”是两个空格(也可以更多)
  4. for /f "delims=  " %%a in ("1 2  3") do echo %%a
  5. for /f "tokens=1,2 delims=aa  " %%a in ("1 2a3  4") do echo %%a.%%b.
  6. pause
复制代码
难道空格问题是因为上面那个特殊原因造成的?

[ 本帖最后由 zqz0012005 于 2009-3-13 12:27 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 12楼 的帖子

另外,好像是for的一个bug:一般来说,多个相同字符会被当作一个字符(它们不是整体作为分隔符,新手往往问到这个问题)。

我觉得这个可能不适合称之为bug,因为人家for就是这样设计的,帮助里面也写的很清楚,当用多个字符作为分隔符时,它们之间是or的关系,多个相同字符之间进行or运算,结果自然是一个字符啦^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13楼 的帖子

我说的Bug是:“但如果指定连续多个空格,空格将无法作为分隔符。”
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 Batcher 于 2009-3-13 09:54 发表
能否尝试在reg query那句中使用其它方法,别用tab呢?

  呵呵,当初考虑问题复杂过头了,只想到不能把路径中的空格丢掉,所以还特意用了Tab键做分隔符。现在已经在顶楼更新了代码,不用再把复制下来的代码进行修改了。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表