中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » reg requery查询注册表时中文路径会"吃掉"最后的字符?
作者:
标题: reg requery查询注册表时中文路径会"吃掉"最后的字符? 取消高亮 | 上一主题 | 下一主题
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『楼 主』:  reg requery查询注册表时中文路径会"吃掉"最后的字符?

  头两天写了一个简单的查看开机自启动程序路径的代码[1],姑且不论查询得是否全面,在测试的过程中发现了一个十分头痛的问题:

  如果自启动程序的路径中含有N个中文字符的话(在注册表中的字符类型为REG_SZ,其他类型的字符暂未测试),那么,这个路径的最后N个字符(一个中文字符占用两个字符位)将被忽略掉,可能和中文的内码是双字节有关,具体的原因我也说不清楚。比如,在HKEY_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run下建立REG_SZ字符串test,值为 c:\program files\测试\test.exe ,那么,执行[1]的代码之后,test所在行显示为 c:\program files\测试\test.e ;如果上述值为 c:\program files\测试\再次测试.exe 的话,结果将显示 c:\program files\测试\再次测 。

  请问,这个问题该如何解决?

1、
@echo off
setlocal enabledelayedexpansion
echo.
echo                开机自启动的程序有:
echo.
for /f "skip=4 tokens=1* delims=:" %%i in ('reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run') do (
    set str=%%i
    set var=%%j
    set "var=!var:"=!"
    if not "!var:~-1!"=="=" echo !str:~-1!:!var!
)
pause>nul
[ Last edited by namejm on 2006-8-1 at 15:21 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-1 00:51
查看资料  发短消息 网志   编辑帖子
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 2 楼』:  

查看开机自启用读取注册表并自己处理结果的方法有点出力不讨好。
如果是XP系统的话建议还是用WMIC来实现最好:wmc startup,如果嫌输出结果难以查看,可以用wmic startup list brief,如果想过滤输出结果,可以用wmic startup where 过滤条件 get 输出项目。
一行命令可以读取多项注册表,而且不用自己去排版,也不需要做什么出错处理。
关于你的代码,对于tokens=1*的用法持怀疑态度。另外,个人认为delims=:的方法也并不是很好。对于你的结果的错误,可能还是因为for和reg命令的输出中字符编码方案不兼容的缘故,你可以把reg命令的结果重定向到文本文件,然后用十六进制编辑器打开看看。

2006-8-1 13:37
查看资料  发送邮件  发短消息 网志   编辑帖子
zts59
中级用户




积分 387
发帖 104
注册 2004-11-19
状态 离线
『第 3 楼』:  

建立一个含中文的启动路径的项目。
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run>aa.txt

试了一下,确实会出现字符被吃。

结果:


! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    wallpaper        REG_SZ        c:\windows\测试\壁纸自?
    IMSCMig        REG_SZ        C:\PROGRA~1\COMMON~1\MICROS~1\IME\IMSC40A\IMSCMIG.EXE /Preload

2006-8-5 13:01
查看资料  发短消息 网志   编辑帖子
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 4 楼』:  

好问题。。。期待解答

2006-8-7 08:17
查看资料  发送邮件  发短消息 网志   编辑帖子
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 5 楼』:  

问题已经解决,方法有多钟:
一是使用2003的REG替换WINXP的REG:
http://www.cn-dos.net/forum/view ... id=Bi8yqD#pid182590 第11楼的帖子
二是可以使用VBS返回给CMD,这个方法我认为比较好.
Set WshShell = Wscript.CreateObject("Wscript.Shell")
tt=WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Start Menu") '' Read from value "Val"
Wscript.echo tt

2007-3-18 04:27
查看资料  发送邮件  发短消息 网志   编辑帖子
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 6 楼』:  

我也出现这种情况了,查询时显示正常,可是输出到文件时就偷工减料。
D:\desktop>reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v startup

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\software\microsoft\windows\currentversion\explorer\user shell folders
    startup     REG_EXPAND_SZ   %USERPROFILE%\「开始」菜单\程序\启动
---------------------------------------------------------------------------------------------------------------
D:\desktop>reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v startup >>test.txt
-----------------
test.txt内容
-----------------

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\software\microsoft\windows\currentversion\explorer\user shell folders
    startup        REG_EXPAND_SZ        %USERPROFILE%\「开始」菜单


因为这是写的一个XP用户用的批处理,叫他们换成2003REG不现实,用5楼的VBS法,谢谢。

[ Last edited by Vampire on 2007-6-15 at 06:59 PM ]

2007-6-15 18:51
查看资料  发送邮件  发短消息 网志   编辑帖子
longmarchw
初级用户





积分 21
发帖 10
注册 2007-11-20
状态 离线
『第 7 楼』:  

VBS返回给CMD?
请问怎么返回,用文件交互?

2007-11-20 23:25
查看资料  发短消息 网志   编辑帖子
ooaf
中级用户





积分 313
发帖 162
注册 2007-4-2
状态 离线
『第 8 楼』:  

转非常批处理 tireless 的:

@echo off
pause
for /f "skip=4 tokens=3 delims=此处为Tab键" %%a in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run') do (
  (echo %%a
)

2009-1-8 12:31
查看资料  发短消息 网志   编辑帖子

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: