Board logo

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

作者: namejm    时间: 2009-3-12 18:22     标题: “打开/另存为”对话框位置栏批处理修改器[2009.3.13更新]

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

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

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

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

  使用这个批处理调整前后效果对比:
[attach]1018[/attach][attach]1020[/attach]

  支持多种输入方式:
[attach]1019[/attach]

  注意事项:

  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}
复制代码

作者: 小勇12    时间: 2009-3-12 21:26

下回去研究,谢谢!!!
作者: 鹤冲天    时间: 2009-3-12 22:14

支持!!
希望能有更多实用程序发布!!
作者: tireless    时间: 2009-3-12 22:15

◆ 组策略里可以设置 —— 用户配置→管理模板→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 编辑 ]
作者: namejm    时间: 2009-3-12 22:32

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

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

  添加类标识符需要在前面加上连续的两个半角冒号:: ,忘记说了,马上添加说明。添加dword值的资料也查到了,下一步打算支持这种输入方式。
作者: tireless    时间: 2009-3-12 22:45     标题: 回复 5楼 的帖子

使用 RegFromApp 可以很方便地显示出软件对注册表的改动。
作者: namejm    时间: 2009-3-12 22:55

  显示路径为空的原因是:论坛会把Tab键识别为一般空格,代码复制回去后,还要把第一条for中的Tab字符串替换为一个跳格键。已经在顶楼做了更新说明。
作者: Batcher    时间: 2009-3-12 22:56     标题: 回复 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/
作者: tireless    时间: 2009-3-12 23:10     标题: 回复 8楼 的帖子

RegFromApp 只要选择要跟踪的程序,然后对这个“程序”进行操作,注册表的改动就会即时显示在 RegFromApp 窗口。而 RegSnap 要生成前后注册表的快照,再比较,这等待的过程太痛苦了...
作者: zqz0012005    时间: 2009-3-12 23:36     标题: 回复 6楼 的帖子

RegFromApp 倒没用过。一般是用Filemon+Regmon和RegSnap。以后试试。
作者: Batcher    时间: 2009-3-13 09:54     标题: 回复 7楼 的帖子

能否尝试在reg query那句中使用其它方法,别用tab呢?
作者: zqz0012005    时间: 2009-3-13 11:28     标题: 回复 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 编辑 ]
作者: Batcher    时间: 2009-3-13 11:41     标题: 回复 12楼 的帖子

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

我觉得这个可能不适合称之为bug,因为人家for就是这样设计的,帮助里面也写的很清楚,当用多个字符作为分隔符时,它们之间是or的关系,多个相同字符之间进行or运算,结果自然是一个字符啦^_^
作者: zqz0012005    时间: 2009-3-13 11:42     标题: 回复 13楼 的帖子

我说的Bug是:“但如果指定连续多个空格,空格将无法作为分隔符。”
作者: namejm    时间: 2009-3-13 18:05

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

  呵呵,当初考虑问题复杂过头了,只想到不能把路径中的空格丢掉,所以还特意用了Tab键做分隔符。现在已经在顶楼更新了代码,不用再把复制下来的代码进行修改了。
作者: sjminh    时间: 2009-3-13 18:46

太牛逼了,写的很严谨嘛,我还是回去研究代码吧
作者: z8h8a8ng    时间: 2009-3-15 09:38

谢谢达,回去研究研究
作者: a794685135    时间: 2009-3-16 22:45

占个位置收藏了
作者: Batcher    时间: 2009-4-27 12:40

十六进制dword值对照表
  1. 00 - Desktop
  2. 01 - Internet Explorer
  3. 02 - Start Menu\Programs
  4. 03 - My Computer\Control Panel
  5. 04 - My Computer\Printers
  6. 05 - My Documents
  7. 06 - Favorites
  8. 07 - Start Menu\Programs\Startup
  9. 08 - \Recent
  10. 09 - \SendTo
  11. 0a - \Recycle Bin
  12. 0b - \Start Menu
  13. 0c - - logical "My Documents" desktop icon
  14. 0d - My Music
  15. 0e - My Videos
  16. 10 - \Desktop
  17. 11 - My Computer
  18. 12 - My Network Places
  19. 13 - \NetHood
  20. 14 - WINDOWS\Fonts
  21. 15 - Templates
  22. 16 - All Users\Start Menu
  23. 17 - All Users\Programs
  24. 18 - All Users\Start Menu
  25. 19 - All Users\Desktop
  26. 1a - \Application Data
  27. 1b - \PrintHood
  28. 1c - \Local Settings\Application Data 1d - - Nonlocalized startup
  29. 1e - - Nonlocalized common startup
  30. 1f - Favorites
  31. 20 - Temporary Internet Files
  32. 21 - Cookies
  33. 22 - History
  34. 23 - All Users\Application Data
  35. 24 - WINDOWS directory
  36. 25 - System32 directory
  37. 26 - Program files
  38. 27 - My Pictures
  39. 28 - USERPROFILE
  40. 29 - - x86 system directory on RISC
  41. 2a - - x86 C:\Program Files on RISC
  42. 2b - C:\Program Files\Common
  43. 2c - - x86 Program Files\Common on RISC
  44. 2d - All Users\Templates
  45. 2e - All Users\Documents
  46. 2f - All Users\Start Menu\Programs\Administrative Tools
  47. 30 - - \Start Menu\Programs\Administrative Tools
  48. 31 - Network and Dial-up Connections
  49. 35 - All Users\My Music
  50. 36 - All Users\My Pictures
  51. 37 - All Users\My Video
  52. 38 - Resource Directory
  53. 39 - Localized Resource Directory
  54. 3a - Links to All Users OEM specific apps
  55. 3b - USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
复制代码

作者: China    时间: 2009-4-27 12:52

我用PlacesBar Editor,免费软件,界面也很直观:


官方:http://melloware.com/products/placesbarv1/
作者: Batcher    时间: 2009-5-8 23:53

按照这个方法修改注册表之后,对Office系列软件不起作用,楼主是否考虑增加对Office的支持呢?
可参考:https://bbs.et8.net/bbs/showthread.php?p=4310367
作者: linzuolou    时间: 2009-5-24 02:19     标题: dsfsdfsdf

sdfsdfdfdf
作者: pkhss    时间: 2009-8-10 13:26

找了半天的软件,哈哈




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2