[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
C:\Users\root\Desktop
为什么指定路径,在当前路径不行吗
我的批处理只能自己创建个文件夹放进去?哎

TOP

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

C:\Users\root\Desktop>type a.bat
@echo hello&pause

C:\Users\root\Desktop>type a.vbs
...
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

C:\Users\root\Desktop>start /b cscript C:\Users\root\Desktop\a.vbs

Listening for Registry Change Events...

C:\Users\root\Desktop>reg add hklm\Software\333 /v 444 /d 28 /f
操作成功完成。

Registry Value Changed: 28

C:\Users\root\Desktop>reg add hklm\Software\333 /v 444 /d 29 /f
操作成功完成。

Registry Value Changed: 29

C:\Users\root\Desktop>


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

你这个是vbs的还是bat的?感觉很乱,并且不能运行提示错误,你能不能整理下

TOP

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

这个代码需修正,应该是"HKEY_LOCAL_MACHINE\333" 里右边的名称"444
而不是HKEY_LOCAL_MACHINE\333\444

会出错的,另外,当第一次运行时注册表项数值正好是29的话就无法执行a.bat 了,

TOP

本帖最后由 wh1234567 于 2012-6-7 01:20 编辑

Value = ws.RegRead(Hive&"\"&KeyPath&"\"&ValueName)
会弹出错误的对话框,是不是需修正下这个代码?
另外,能不能弄成当第一次运行或在监视的过程中发现数值是大于29就自动执行a.bat,这样比较稳定一些,

TOP

本帖最后由 wh1234567 于 2012-6-7 13:35 编辑

xp的,代码就是复制你的9楼的代码,19楼的我看不懂,没法测试成功

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

弹出错误窗口内容如下:

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

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

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

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

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

TOP

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

TOP

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

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

vbs的

TOP

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

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

TOP

呵呵呵,测试能行,只是得修正那2个问题就行

TOP

在线等......

TOP

本帖最后由 wh1234567 于 2012-6-8 19:56 编辑

打开一个cmd,按37楼的步骤把那些红色的命令逐条运行一次,确认没问题能正常执行,也不弹出错误窗口。
但是如果直接运行a.vbs的话当数值变化成29时就会弹出那个错误窗口,同时也会自动执行a.bat。
为什么?

TOP

返回列表