![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-04 16:30 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » reg requery查询注册表时中文路径会"吃掉"最后的字符? |
| 可打印版本 4,335 / 7 |
| 第1楼 namejm | 发表于 2006-08-01 00:51 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
reg requery查询注册表时中文路径会"吃掉"最后的字符? 头两天写了一个简单的查看开机自启动程序路径的代码,姑且不论查询得是否全面,在测试的过程中发现了一个十分头痛的问题:
如果自启动程序的路径中含有N个中文字符的话(在注册表中的字符类型为REG_SZ,其他类型的字符暂未测试),那么,这个路径的最后N个字符(一个中文字符占用两个字符位)将被忽略掉,可能和中文的内码是双字节有关,具体的原因我也说不清楚。比如,在HKEY_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run下建立REG_SZ字符串test,值为 c:\program files\测试\test.exe ,那么,执行的代码之后,test所在行显示为 c:\program files\测试\test.e ;如果上述值为 c:\program files\测试\再次测试.exe 的话,结果将显示 c:\program files\测试\再次测 。 请问,这个问题该如何解决? 1、 [ Last edited by namejm on 2006-8-1 at 15:21 ] |
|
| 第2楼 3742668 | 发表于 2006-08-01 13:37 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
查看开机自启用读取注册表并自己处理结果的方法有点出力不讨好。
如果是XP系统的话建议还是用WMIC来实现最好:wmc startup,如果嫌输出结果难以查看,可以用wmic startup list brief,如果想过滤输出结果,可以用wmic startup where 过滤条件 get 输出项目。 一行命令可以读取多项注册表,而且不用自己去排版,也不需要做什么出错处理。 关于你的代码,对于tokens=1*的用法持怀疑态度。另外,个人认为delims=:的方法也并不是很好。对于你的结果的错误,可能还是因为for和reg命令的输出中字符编码方案不兼容的缘故,你可以把reg命令的结果重定向到文本文件,然后用十六进制编辑器打开看看。 |
|
| 第3楼 zts59 | 发表于 2006-08-05 13:01 |
| 中级用户 发帖 104 积分 387 | |
|
建立一个含中文的启动路径的项目。
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 |
|
| 第4楼 acoreq | 发表于 2006-08-07 08:17 |
| 初级用户 发帖 32 积分 98 来自 Shanghai | |
|
好问题。。。期待解答
|
|
| 第5楼 HUNRYBECKY | 发表于 2007-03-18 04:27 |
| 银牌会员 发帖 442 积分 1,179 | |
|
问题已经解决,方法有多钟:
一是使用2003的REG替换WINXP的REG: http://www.cn-dos.net/forum/viewthread.php?tid=27279&page=1&sid=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 |
|
| 第6楼 Vampire | 发表于 2007-06-15 18:51 |
| 初级用户 发帖 78 积分 176 | |
|
我也出现这种情况了,查询时显示正常,可是输出到文件时就偷工减料。
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 ] |
|
| 第7楼 longmarchw | 发表于 2007-11-20 23:25 |
| 初级用户 发帖 10 积分 21 | |
|
VBS返回给CMD?
请问怎么返回,用文件交互? |
|
| 第8楼 ooaf | 发表于 2009-01-08 12:31 |
| 中级用户 发帖 162 积分 313 | |
|
转非常批处理 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 ) |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |