[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
呵呵呵,测试能行,只是得修正那2个问题就行

TOP

回复 49# wh1234567


    我怎么觉得你脑子还没转过弯来呢?

TOP

本帖最后由 wh1234567 于 2012-6-7 18:28 编辑

a.bat这是我的批处理,a.vbs这个是vbs代码程序吧,没错,就修正那2个问题就行,我理解你说的意思了,呵呵呵

TOP

回复 47# wh1234567


你为什么不按我说的来呢?没有a.vbs和a.bat你建一个不就行了,内容已经type出来了。
现在重点是为什么我测试没问题而你一搞就报错,把这个原因找到其他功能随便加。

TOP

本帖最后由 wh1234567 于 2012-6-7 17:34 编辑

刚才可能是我多操作了几次导致系统或这个批处理出现问题,现在我将进程全部删除后程序运行29就执行,
只是你37楼的type a.vbs这个我没创建,可能是a.bat吧?其他显示正常,现在只修正我刚说的那2个问题就估计完美了,很感谢您帮我帮到底,呵呵呵

vbs的

TOP

我是路过的……
1

评分人数

TOP

请打开一个cmd,按37楼的步骤把那些红色的命令逐条运行一次,确认一下是不是你的系统有问题。
确定没问题了就一切好说,不然大家永远无法沟通。

TOP

是不是问题出在    Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName) 这里?
现在就是这2个问题需修正:
1.如果第一次运行(原数值正好就是29就不能执行a.bat了,需修正)发现是29就自动执行a.bat
2.弹出错误窗口

TOP

RegRead那个没问题,vbs与reg命令语法不一样。

你运行vbs后始终会报错吗?没有成功运行a.bat的情况出现?如果始终出错,可能是你的系统有问题。
如果只是偶尔出现“法打开注册键值进行读取”的错误,那可能是某个程序对注册表该位置进行了锁定或设置了权限,造成vbs无法读取。

TOP

嗯,是的,如果第一次运行(原数值就是29就不能执行a.bat了,需修正)发现是29就自动执行a.bat,这样就比较完美了
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\rdc"
ValueName = "444"

我把333改为rdc,444是数值,不应该跟到这个\后面吧.
当数值变化为29时在执行a.bat时就会弹出这个错误窗口,

TOP

脚本中什么读过 HKEY_LOCAL_MACHINE\333\444 ?不要胡乱构造!
打开一个cmd,用cscript运行vbs,方便调试,所有信息都会在cmd中显示,既方便查看又便于复制。
你1楼的提问并不是说“大于29”,而是“为29”,请准确描述自己的问题。
好几处都是这样,你自己都说不清楚,别人怎么帮你呢?

TOP

本帖最后由 wh1234567 于 2012-6-7 16:22 编辑

是当监视到数值是大于29就自动执行a.bat,而不是数值变化到29才执行a.bat,呵呵呵,如果原数值或者是变化到的数值是例如20或32就无能为力了不能执行a.bat了吧?
并不是按照顺序由28变化到29才执行a.bat,而是不管原数值是多少,只要发现是29就自动执行a.bat

TOP

弹出错误窗口内容如下:

脚本:        C:\Documents and Settings\Administrator\桌面\新建 文本文档 (2).vbs
行:        18
字符:        5
错误:        无法打开注册键值 "HKEY_LOCAL_MACHINE\333\444" 进行读取。
代码:        80070002
源:         WshShell.RegRead

红色的这个显示不对吧?估计是代码的问题,识别错误了

TOP

嗯,就是这个vbs代码吧
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"

Set ws = CreateObject("WScript.Shell")
Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
Set objWMIServices = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\.\root\default")
objWMIServices.ExecNotificationQueryAsync Sink, _
    "Select * from RegistryValueChangeEvent Where " & _
    "Hive = '"&Hive&"' and " & _
    "KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
    "ValueName = '"&ValueName&"'"
WScript.Echo "Listening for Registry Change Events..." & vbCrLf
Do : WScript.Sleep 1000 : Loop

Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
    Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
    WScript.Echo "Registry Value Changed: " & Value
    if CStr(Value)="29" then ws.Run "a.bat" ',0 '后面加0表示隐藏窗口运行
End Sub

但是如何第一次运行这个vbs,当数值大于29时就好像无法执行a.bat 了,另外发现当数值由其他数变化到29时才会执行a.bat ,而且会弹出错误的窗口。甚至个别时候数值变化到29也无法执行a.bat
这2个问题还得您需要修正一下代码,弄成运行后监视到数值大于29时就全自动执行a.bat,和修正弹出错误的窗口
弹出错误的窗口的原因可能是
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"
....
    Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)

TOP

本帖最后由 powerbat 于 2012-6-7 14:27 编辑

回复 36# wh1234567


Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>cd /d D:\

D:\>type a.vbs
Hive = "HKEY_LOCAL_MACHINE"
KeyPath = "Software\333"
ValueName = "444"

Set ws = CreateObject("WScript.Shell")
Set Sink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
Set objWMIServices = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\.\root\default")
objWMIServices.ExecNotificationQueryAsync Sink, _
    "Select * from RegistryValueChangeEvent Where " & _
    "Hive = '"&Hive&"' and " & _
    "KeyPath = '"&Replace(KeyPath,"\","\\")&"' and " & _
    "ValueName = '"&ValueName&"'"
WScript.Echo "Listening for Registry Change Events..." & vbCrLf
Do : WScript.Sleep 1000 : Loop

Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
    Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
    WScript.Echo "Registry Value Changed: " & Value
    if CStr(Value)="29" then ws.Run "a.bat" ',0 '后面加0表示隐藏窗口运行
End Sub

D:\>type a.bat
@echo hello&pause

D:\>start /b cscript a.vbs

Listening for Registry Change Events...

D:\>reg add hklm\Software\333 /v 444 /d 28 /f
操作成功结束

Registry Value Changed: 28

D:\>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功结束

Registry Value Changed: 29

==============================================================================
vbs自动运行a.bat弹出了一个窗口:
hello
请按任意键继续. . .

==============================================================================

D:\>reg add hklm\Software\333 /v 444 /d 27 /f
操作成功结束

Registry Value Changed: 27

D:\>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功结束

Registry Value Changed: 29

==============================================================================
vbs自动运行a.bat弹出了一个窗口:
hello
请按任意键继续. . .

==============================================================================

D:\>


再看不懂你就不要学批处理了。。。

TOP

返回列表