Board logo

标题: [文件操作] 两台电脑执行重定向到文件,文件内容却不同! [打印本页]

作者: bsmyd    时间: 2009-12-1 11:30     标题: 两台电脑执行重定向到文件,文件内容却不同!

小子新手一个,有个问题昨天困扰了我一整天,特来求助各位大虾。
我要从注册表导出一个文件,代码如下:
reg query "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\汇众软件\Settings" /v NJBSVName >1.txt

在我自己的电脑上,1.txt的内容是正常的:

! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\汇众软件\Settings
    NJBDBName REG_SZ NEW

但是到了另外一台电脑上,1.txt的内容却变成了

! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\汇众软件\Settin    NJBSVName REG_SZ P199

各位大虾,两者不同的地方,就是上面红色的部分,不仅一行没有显示完,还没有换行!

我猜想,这可能是两台电脑的环境不同造成的,但是我对比了一下环境变量,太菜了,也看不出有什么区别。
两台电脑都是XP,只不过,一台是SP2,一台是SP3。

就是这个问题,造成我后面的for语句无法继续执行,因为我用了skip=4,到另外一台电脑上,取出来的就是空值了
for语句如下:
for /f "skip=4 tokens=3" %%a in (1.txt) do set svname=%%a
忽略前4行,取第5行的第三个值,就是注册表的值(例如NEW 或 p199)

我想,这个问题本来是可以继续书写比较复杂的for语句,按NJBSVName这个关键字符串来截取一段,再取后面的P199值,但是我想搞清楚这到底是什么问题,为什么在不同的电脑上,同样一个语句,结果却不同,能否有办法解决?最后,如果实在无法解决,再写比较复杂的for语句。如果各位大虾不嫌麻烦,就最后帮我把这段代码写出来吧,要能兼容这两种文件内容,因为,还有很多台电脑等着去执行这段代码,我也不知道他们执行的结果又是什么样子。
这件事,真是让我对批处理有些灰心了,我想写程序,最怕的就是执行环境不同了,批处理的兼容性居然这么差,如此简单的语句都会碰到这种问题,我真想知道,各位大虾都是怎么解决这个问题的?
作者: zqz0012005    时间: 2009-12-1 12:21

两台电脑都是XP,只不过,一台是SP2,一台是SP3。
========================================
这就是关键!
SP2的reg.exe命令有bug

批处理的兼容性居然这么差
========================================
你应该说微软的操作系统兼容性居然这么差!没看到几乎所有软件都要标明操作系统版本吗?
作者: bsmyd    时间: 2009-12-1 12:55     标题: 回复 2楼 的帖子

不是吧,我比较了两台电脑的REG程序,版本都是一样的3.0,而且,用命令行方式执行REG,在CMD里面结果都是对的,都是一样的,跟我最初的1.txt内容相同,但是导到1.txt以后,就不一样了
作者: Batcher    时间: 2009-12-1 21:16     标题: 回复 3楼 的帖子

这个,可以是。
因为XP SP2里面reg命令的bug在命令行里面是体现不出来的,但是在重定向输出到文件里面的时候就会体现出来。




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