“打开/另存为”对话框位置栏批处理修改器[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“吃字”是怎么回事,请阅读这篇文章:[b]reg requery查询注册表时中文路径会"吃掉"最后的字符?[/b][url=http://www.cn-dos.net/forum/viewthread.php?tid=22202]http://www.cn-dos.net/forum/viewthread.php?tid=22202[/url]
3、代码没有做全面的容错检测,请严格按照提示操作,否则,将不能正确修改路径。[code]@echo off
:: Code by namejm 2009.3.12 Modified on 2009.3.13
:: 不支持带感叹号的路径
:: 争取对默认设置的次序进行重排
set TT="打开/另存为"对话框位置栏修改器
title %TT%
mode con lines=25 cols=70
setlocal enabledelayedexpansion
set RegPath=HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32
:Main
cls
for /f "delims==" %%i in ('set place 2^>nul') do set "%%i="
set custom=
for /f "skip=4 tokens=1,2*" %%i in ('reg query %RegPath%\Placesbar 2^>nul') do (
set custom=yes
set "%%i=%%k"
)
:ShowConfigDefault
title %TT%-默认设置
if not defined custom (
echo.&echo 当前使用的是系统默认的设置
echo ____________________________________________________________________
echo.&echo 位置序号 对应的路径
echo ——————————————
echo 1 我最近的文档
echo 2 桌面
echo 3 我的文档
echo 4 我的电脑
echo 5 网上邻居
echo ——————————————
echo 建议自行设置更合理的位置
echo.&echo.
echo.
echo 退出请按 0 全新设置请按 1
echo ____________________________________________________________________
echo.
set choice=
set /p choice= 请输入功能代码(0/1):
if not defined choice (
goto Main
) else (
if "!choice!"=="0" exit
if "!choice!"=="1" goto SetNew
)
goto ShowConfigDefault
)
:ShowConfigCustom
title %TT%-自定义设置
cls
echo.&echo 当前使用的是用户自定义设置
echo ____________________________________________________________________
echo.&echo 位置序号 对应的路径
echo ——————————————————
set num=0
for /f "delims==" %%i in ('set path_ 2^>nul') do set "%%i="
for /f "tokens=1* delims==" %%i in ('set place') do (
set /a num+=1
set "path_!num!=%%~j"
echo !num! "%%~j"
)
echo ——————————————————
echo.&echo.&echo.
echo 退出请按 0 恢复默认设置请 1
echo ____________________________________________________________________
echo.
echo 调整当前设置的顺序请按 2 重新设置新路径请按 3
echo.
set choice=
set /p choice= 请输入功能代码(0/1/2/3):
if not defined choice (
goto ShowConfigCustom
) else (
if "%choice%"=="0" exit
if "%choice%"=="1" reg delete %RegPath% /f>nul&goto Main
if "%choice%"=="2" goto SortConfig
if "%choice%"=="3" goto SetNew
)
goto ShowConfigCustom
:SortConfig
title %TT%-调整顺序
cls
echo.&echo 自定义位置的顺序
echo ____________________________________________________________________
echo.&echo 位置序号 对应的路径
echo ——————————————————
for /f "tokens=2* delims=_=" %%i in ('set path_') do (
set "str=%%j"
echo %%i "!str!"
)
echo ——————————————————
echo.&echo ____________________________________________________________________
echo.
echo 若要调整自定义位置的当前顺序,请按照以下步骤操作:
echo.&echo 重新排列 1~%num% 这%num%个数字,并以空格分隔
echo.&echo 重排后的数字顺序就是新的路径顺序
echo.
set order=
set /p order= 请依次输入重排后的数字,并以空格分隔(退出请按0):
if not defined order goto SortConfig
if "%order%"=="0" exit
set /a num1=0
:: 需要对形如 c:\ 的路径做特别处理
for %%i in (%order%) do (
if %%i gtr %num% goto SortConfig
set /a num2=%%i-1
call set "var=%%place!num2!%%"
if "!var:~-1!"=="\" set "var=!var!\"
set "str!num1!=!var!"
set /a num1+=1
)
set /a num-=1
reg delete %RegPath%\Placesbar /f>nul
for /l %%i in (0,1,%num%) do (
reg add %RegPath%\Placesbar /v place%%i /t REG_SZ /d "!str%%i!">nul
)
echo.&pause
goto Main
:SetNew
title %TT%-指定新路径
cls
reg delete %RegPath% /f>nul 2>nul
echo.&echo 请指定新的路径
echo ____________________________________________________________________
echo.&echo 注意事项:
echo ① 不能输入不存在的路径
echo ② 若只输入盘符,一定要以两条反斜杠结束,
echo 比如:c:\\
echo ③ 若输入的是路径,结尾部分不能带任何反
echo 斜杠,比如:c:\test
echo ④ 最多只能输入5条路径
echo 小技巧:① 可以把文件夹直接拖曳到本窗口
echo ② 输入的内容可以是类标识符(CLSID),
echo 但是需要在类标识符前加双冒号::
echo ————————————————————————
echo.
set num=0
for /f "delims==" %%i in ('set str 2^>nul') do set "%%i="
for /l %%i in (1,1,5) do (
set /p str%%i= 请输入第%%i个路径(直接回车将结束输入):
if defined str%%i (
set /a num+=1
set "str%%i=!str%%i:"=!"
) else goto ChangePath
)
:ChangePath
echo ____________________________________________________________________
set num1=0
for /l %%i in (1,1,%num%) do (
reg add %RegPath%\Placesbar /v place!num1! /t REG_SZ /d "!str%%i!">nul
set /a num1+=1
)
echo.&pause
goto Main[/code]部分常用类标识符(CLSID):[code]我的电脑 {20D04FE0-3AEA-1069-A2D8-08002B30309D}
我的文档 {450D8FBA-AD25-11D0-98A8-0800361B1103}
打印机 {2227A280-3AEA-1069-A2DE-08002B30309D}
网上邻居 {208D2C60-3AEA-1069-A2D7-08002B30309D}
回收站 {645FF040-5081-101B-9F08-00AA002F954E}
公文包 {85BBD920-42A0-1069-A2E4-08002B30309D}
控制面板 {21EC2020-3AEA-1069-A2DD-08002B30309D}
WEB文件夹{BDEADF00-C265-11D0-BCED-00A0C90AB50F}
历史记录 {FF393560-C2A7-11CF-BFF4-444553540000}
收藏夹 {1A9BA3A0-143A-11CF-8350-444553540000}[/code] 下回去研究,谢谢!!! 支持!!
希望能有更多实用程序发布!! ◆ 组策略里可以设置 —— 用户配置→管理模板→Windows组件→Windows资源管理器→通用打开文件对话框。
◆ 有个小软件
◆ 输入类标识符,在我这里无效(系统:xp sp2 中文版)。有两个方法添加“我的电脑”等这些,添加下面的英文或里面的 dword 值:
[quote]CommonDocuments (2e), CommonMusic (35), CommonPictures (36) , Desktop (0), MyComputer (11), MyDocuments (5), MyFavorites (6), MyMusic (d), MyNetworkPlaces (), MyPictures (27), Printers (4), ProgramFiles (), Recent (8) ...[/quote]
◆ 运行批处理,我这始终显示:
[quote] 位置序号 对应的路径
——————————————————
1 ""
2 ""
3 ""
4 ""
5 ""
——————————————————[/quote]
[[i] 本帖最后由 tireless 于 2009-3-12 22:41 编辑 [/i]] 深度那款软件以前用过,还用过其他几款,以前一直没有找到在哪里修改注册码,这两天在网上无意中发现了这方面的资料,于是就动了写批处理的念头。
组策略里以前也曾经玩过几次,但是需要层层展开,指指点点,进进出出几次之后,就感到太过繁琐而放弃了。
添加类标识符需要在前面加上连续的两个半角冒号[color=red][b]::[/b][/color] ,忘记说了,马上添加说明。添加dword值的资料也查到了,下一步打算支持这种输入方式。
回复 5楼 的帖子
使用 [url=http://www.nirsoft.net/utils/reg_file_from_application.html]RegFromApp[/url] 可以很方便地显示出软件对注册表的改动。 显示路径为空的原因是:论坛会把Tab键识别为一般空格,代码复制回去后,还要把第一条for中的Tab字符串替换为一个跳格键。已经在顶楼做了更新说明。回复 6楼 的帖子
我一般用RegSnap,呵呵,下次试试你这个。【分享】
Outlook的“另存为”在注册表的这个地方设置:[code]reg add "HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Options" /v DefaultPath /t REG_SZ /d "C:\Users\%username%\Desktop" /f[/code]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
参考:[url=https://www.outlook-tips.net/tips/change-outlooks-open-save-attachments-folder/]https://www.outlook-tips.net/tips/change-outlooks-open-save-attachments-folder/[/url]
回复 8楼 的帖子
RegFromApp 只要选择要跟踪的程序,然后对这个“程序”进行操作,注册表的改动就会即时显示在 RegFromApp 窗口。而 RegSnap 要生成前后注册表的快照,再比较,这等待的过程太痛苦了...回复 6楼 的帖子
RegFromApp 倒没用过。一般是用Filemon+Regmon和RegSnap。以后试试。回复 7楼 的帖子
能否尝试在reg query那句中使用其它方法,别用tab呢?回复 7楼 的帖子
分隔符是空格或跳格键时无需指定,它们是默认的分隔符集。论坛把tab转换为8个空格后,可能是由于下面的原因导致楼主的bat出错。
好像是for的一个bug:[color=red]一般来说,多个相同字符会被当作一个字符(它们不是整体作为分隔符,新手往往问到这个问题)。[/color][color=blue]但如果指定连续多个空格,空格将无法作为分隔符。[/color]
补充以前讨论的一个要点:[color=red]如果分隔符集里面含有空格,空格必须放在最后。[/color][code]@echo off
for /f "delims=aa" %%a in ("1a2") do echo %%a
rem 下面的“宽空格”是两个空格(也可以更多)
for /f "delims= " %%a in ("1 2 3") do echo %%a
for /f "tokens=1,2 delims=aa " %%a in ("1 2a3 4") do echo %%a.%%b.
pause[/code]难道空格问题是因为上面那个特殊原因造成的?
[[i] 本帖最后由 zqz0012005 于 2009-3-13 12:27 编辑 [/i]]
回复 12楼 的帖子
[quote]另外,好像是for的一个bug:一般来说,多个相同字符会被当作一个字符(它们不是整体作为分隔符,新手往往问到这个问题)。[/quote]
我觉得这个可能不适合称之为bug,因为人家for就是这样设计的,帮助里面也写的很清楚,当用多个字符作为分隔符时,它们之间是or的关系,多个相同字符之间进行or运算,结果自然是一个字符啦^_^
回复 13楼 的帖子
我说的Bug是:“但如果指定连续多个空格,空格将无法作为分隔符。” [quote]原帖由 [i]Batcher[/i] 于 2009-3-13 09:54 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=23373&ptid=3692][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]能否尝试在reg query那句中使用其它方法,别用tab呢? [/quote]
呵呵,当初考虑问题复杂过头了,只想到不能把路径中的空格丢掉,所以还特意用了Tab键做分隔符。现在已经在顶楼更新了代码,不用再把复制下来的代码进行修改了。 太牛逼了,写的很严谨嘛,我还是回去研究代码吧 谢谢达,回去研究研究 占个位置收藏了 [color=Blue]十六进制[/color]dword值对照表[code]00 - Desktop
01 - Internet Explorer
02 - Start Menu\Programs
03 - My Computer\Control Panel
04 - My Computer\Printers
05 - My Documents
06 - Favorites
07 - Start Menu\Programs\Startup
08 - \Recent
09 - \SendTo
0a - \Recycle Bin
0b - \Start Menu
0c - - logical "My Documents" desktop icon
0d - My Music
0e - My Videos
10 - \Desktop
11 - My Computer
12 - My Network Places
13 - \NetHood
14 - WINDOWS\Fonts
15 - Templates
16 - All Users\Start Menu
17 - All Users\Programs
18 - All Users\Start Menu
19 - All Users\Desktop
1a - \Application Data
1b - \PrintHood
1c - \Local Settings\Application Data 1d - - Nonlocalized startup
1e - - Nonlocalized common startup
1f - Favorites
20 - Temporary Internet Files
21 - Cookies
22 - History
23 - All Users\Application Data
24 - WINDOWS directory
25 - System32 directory
26 - Program files
27 - My Pictures
28 - USERPROFILE
29 - - x86 system directory on RISC
2a - - x86 C:\Program Files on RISC
2b - C:\Program Files\Common
2c - - x86 Program Files\Common on RISC
2d - All Users\Templates
2e - All Users\Documents
2f - All Users\Start Menu\Programs\Administrative Tools
30 - - \Start Menu\Programs\Administrative Tools
31 - Network and Dial-up Connections
35 - All Users\My Music
36 - All Users\My Pictures
37 - All Users\My Video
38 - Resource Directory
39 - Localized Resource Directory
3a - Links to All Users OEM specific apps
3b - USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning [/code] 我用PlacesBar Editor,免费软件,界面也很直观:
[img]http://melloware.com/images/pb_windows.png[/img]
[img]http://melloware.com/images/pb_office.png[/img]
官方:[url]http://melloware.com/products/placesbarv1/[/url] 按照这个方法修改注册表之后,对Office系列软件不起作用,楼主是否考虑增加对Office的支持呢?
可参考:[url]https://bbs.et8.net/bbs/showthread.php?p=4310367[/url]
dsfsdfsdf
sdfsdfdfdf 找了半天的软件,哈哈页:
[1]