Board logo

标题: [已结]如何用批处理分析注册表中收藏夹的路径? [打印本页]

作者: sglxy     时间: 2006-10-31 09:37    标题: [已结]如何用批处理分析注册表中收藏夹的路径?

我发现许多Windows XP用户的收藏夹的路径并非默认的,而是经用户自己修改的。在备份收藏夹时常常是大费周折,后来我发现在注册表中可以找到收藏夹的路径。以下是我在一个用户注册表中手工导出的键值:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Favorites"="D:\\!临时文件夹\\!互联网临时文件夹\\Favorites"
"Personal"="D:\\!我的文档"
"SendTo"="D:\\!我的文档\\SendTo"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Favorites"="D:\\!临时文件夹\\!互联网临时文件夹\\Favorites"
"Personal"="D:\\!我的文档"
"SendTo"="D:\\!我的文档\\SendTo"
-------------------------------------------------------
我想通过批处理实现以下目的:
1、先用批处理自动导出用户注册表的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]和[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]分支。并存为Favorites.reg文件。
2、然后,再用批处理对Favorites.reg文件进行处理,取得Favorites所在路径并保存到%fav%变量中备用。

请问批处理中如何能达到这个效果?,请各位朋友指点,在此先谢谢了!

[ Last edited by sglxy on 2006-11-3 at 08:11 AM ]
作者: redtek     时间: 2006-10-31 10:07
晕,这么复杂啊~:)

我装有系统的分区里除了IE收藏夹(%HOMEPATH%\Favorites)备份以外,
桌面上使用的重要文档和常进的目录,全是以快捷方式指向非系统所在分区的某个目录而已,
系统坏了除了收藏夹要备份以外(RAR压缩收藏夹目录,也就一分钟),
然后没有再要备份的了,GHOST就完了~:)

(系统分区除了那个收藏夹以外,从来不放任何将来还要备份花时间的东东,这样省事)
作者: sglxy     时间: 2006-10-31 10:44
我只想将其中的"Favorites"="D:\\!临时文件夹\\!互联网临时文件夹\\Favorites"
找出来改变为D:\!临时文件夹\!互联网临时文件夹\Favorites 并保存到%fav%变量中去。
作者: lxmxn     时间: 2006-10-31 12:22

@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=1,2,*" %%i in ('REG QUERY "HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\SHELL FOLDERS" ^| FIND /I "FAVORITES"') DO (
        SET Fav_IN_SHELL_FAV=%%k
        ECHO Favorites在SHELL FOLDERS子键下的值是:
        ECHO !Fav_IN_SHELL_FAV!)
echo[&echo]
for /f "tokens=1,2,*" %%i in ('REG QUERY "HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\USER SHELL FOLDERS" ^| FIND /I "FAVORITES"') DO (
        SET Fav_USER_SHELL_FAV=%%k
        ECHO Favorites在USER SHELL FOLDERS子键下的值是:
        ECHO !Fav_USER_SHELL_FAV!)
PAUSE

作者: fastslz     时间: 2006-10-31 12:37

@echo off
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Favorites"') do (
set Fav=%%j
)
echo 当前收藏夹位于 %Fav%
pause
[ Last edited by fastslz on 2006-10-31 at 12:52 PM ]
作者: sglxy     时间: 2006-10-31 19:09
两位朋友的方法都很精练,但是得到的值却并非我所希望的D:\!临时文件夹\!互联网临时文件夹\Favorites。而是好象短路径的那种:当前收藏夹位于 D:\互联网临时文?
作者: NaturalJ0     时间: 2006-10-31 20:27
其实用鼠标直接去剪切到后面的盘就行了,剪好了做下备份就一直认后面的盘了。
作者: fastslz     时间: 2006-10-31 21:05
好象短路径的那种?中文长文件名我未测试~
作者: sglxy     时间: 2006-10-31 21:18


  Quote:
Originally posted by NaturalJ0 at 2006-10-31 08:27 PM:
其实用鼠标直接去剪切到后面的盘就行了,剪好了做下备份就一直认后面的盘了。

谢谢NaturalJ0的热心解答,之所以需要批处理的方式自动分析,是希望它成为某一批处理的其中一个模块。在系统维护中大大减轻操作者的劳动强度。而用鼠标就失去了意义。

另外,本人在4、5楼朋友的启发下。将其作品改写如下,请朋友们指正:
@echo off
reg export "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" fav.reg
for /f "tokens=2 delims==" %%b in ('find /i "Favorites" fav.reg') do set fav=%%b
set fav=%fav:\\=\%
set fav=%fav:"=%
echo 本机的收藏夹位于%fav%>收藏夹.txt
del fav.reg
pause>nul


但是本批处理脚本运行结束后,总一个提示“操作成功结束”。该如何去掉它?

[ Last edited by sglxy on 2006-10-31 at 09:26 PM ]
作者: 不得不爱     时间: 2006-10-31 22:04

@echo off
REG EXPORT "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" a.reg /nt4>nul
for /f "tokens=2 delims==" %%a in ('find "Favorites" a.reg') do set fav=%%~a
echo 收藏夹位于%fav%

作者: sglxy     时间: 2006-10-31 22:36


  Quote:
Originally posted by qwe1234567 at 2006-10-31 10:04 PM:
[code]@echo off
REG EXPORT "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" a.reg /nt4>nul
for /f "tokens=2 delims==" %%a in ('find "Favorites&q ...

谢谢qwe1234567版主,我明白了,原来这句提示是reg命令产生的,我开始以为是del fav.reg产生的。
作者: lxmxn     时间: 2006-11-1 00:23

  想不到 reg export 还有一个隐藏的参数,呵呵,学习了。

作者: sglxy     时间: 2006-11-1 00:51
请问超级版主,REG EXPORT "HKCU\Software\……一句中的“/nt4”参数代表什么意思?

另外,你的帖子里有一句:set fav=%%~a 我知道是附值。 但是其中的
“%%a”为何写成“%%~a”,它的意义是什么?请指点一下。

[ Last edited by sglxy on 2006-11-1 at 12:54 AM ]
作者: lxmxn     时间: 2006-11-1 01:39

  "/nt4"参数是指定导出的注册表文件里面表明的注册表版本信息,也就是"REGEDIT4"了,没有"/nt4"的参数,那么版本就可能是"Windows Registry Editor Version 5.00"了。

  "%%~a"是"%%a"变量的扩展,作用就是去掉"%%a"外面的引号。

作者: namejm     时间: 2006-11-1 01:41
  代超版回答:%%~a 是删除字符串前后的任何引号的意思。
作者: sglxy     时间: 2006-11-1 01:51
谢谢,太谢谢了!收益非浅。
作者: yszy     时间: 2006-11-1 16:13
顶下``收藏起来
作者: 不得不爱     时间: 2006-11-1 23:05
/nt4 以windowsNT4.0的注册表格式导出
作者: bootp     时间: 2006-11-29 09:11
这个程序在WINDOWS 2000中运行不成功,只能在XP下运行吗?

能不能搞一个可以windows98\me\NT\2000\XP通用的呢?

盼高手给予解答。

[ Last edited by bootp on 2006-11-29 at 08:21 AM ]
作者: qiongshuai     时间: 2007-3-2 06:09
谢谢你啊,很有用的东西,谢谢阿