Board logo

标题: 求高手~(监测到U盘后自动执行一个文件的批处理) [打印本页]

作者: cb9020291     时间: 2010-1-8 15:51    标题: 求高手~(监测到U盘后自动执行一个文件的批处理)

每10秒监测一次,当电脑插上U盘后,自动执行一个文件。请问该如何实现?
作者: clamber     时间: 2010-1-8 17:55
用计划任务每1分钟执行一次指定程序:
schtasks /create /sc minute /mo 1 /st 00:00:00 /tn "autor" /ru system /tr """"C:\autor.bat""""
把下面批处理保存到c:\autor.bat,系统每1分钟查找一次是否存在不为空的可移动磁盘,如果有,就执行指定程序。
@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%a in ('fsutil fsinfo drives^|find /v ""') do (
    set aa=%%a
    fsutil fsinfo drivetype !aa:~-2!|findstr "可移动"&&start "" "C:\Program Files\Windows NT\Pinball\PINBALL.EXE"
)
endlocal
这是在后台用SYSTEM权限运行的,如果要换成前台就要配合AT的前台运行命令执行。

[ Last edited by clamber on 2010-1-8 at 18:29 ]
作者: clamber     时间: 2010-1-8 18:36
LZ说每隔10秒,用P处理这样搞是不是有点费内存了?把上面改一下贴上来,不知道这样是不是LZ需要的哈
@echo off
:re
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%a in ('fsutil fsinfo drives^|find /v ""') do (
    set aa=%%a
    fsutil fsinfo drivetype !aa:~-2!|findstr "可移动"&&start "" "C:\Program Files\Windows NT\Pinball\PINBALL.EXE"
)
ping -n 10 127.1>nul
endlocal
goto re

作者: newxso     时间: 2010-1-8 19:58    标题: U盘和移动硬盘监视脚本

用批处理循环会很占资源,用VBS会好些:
'监视新增“可移动磁盘(U盘)”和新增“本地磁盘(HDD格式U盘或移动硬盘)”
'有新插入的就自动复制其中的所有文件和文件夹到d:\Test中
'若出现多个新增“可移动磁盘”和“本地磁盘”的话,每个盘中的内容均被复制

'取得WSH对象
Set WshShell=WScript.CreateObject("WScript.Shell")
'取得WMI服务对象
Set objWMIService=GetObject("winmgmts:\\.\root\cimv2")
'执行事件通知查询,具体是Win32_LogicalDisk类下的__InstanceOperationEvent,
'并且将结果保存在colEvents变量中
Set colEvents=objWMIService.ExecNotificationQuery ("Select * From __InstanceOperationEvent Within 5 Where TargetInstance isa 'Win32_LogicalDisk'")

'设置目标目录(存放复制文件的文件夹)
strFolder="d:\test\"

'不设置退出条件的循环,除非收到结束脚本语句:Wscript.Quit
Do While True
   '设置变量为集合中的新事件
   Set objEvent=colEvents.NextEvent
   '判断磁盘类型是否是可移动磁盘和本地磁盘(针对移动硬盘)
   If (objEvent.TargetInstance.DriveType=3 OR objEvent.TargetInstance.DriveType=2) Then
      '判断对象的类别是不是属于__InstanceCreationEvent
      '__InstanceCreationEvent (它会告诉我们已经创建了一个新驱动器)
      '__InstanceDeletionEvent (它会告诉我们已经删除了一个现有驱动器)
      If objEvent.Path_.Class="__InstanceCreationEvent" Then
         '获取新驱动器的盘符
         NewDri=objEvent.TargetInstance.DeviceId&"\"
         '调用xcopy命令,复制新增盘下的内容(用CMD命令可以解决没有权限问题)
         WshShell.Run "cmd.exe /c xcopy /e/h/r/y "&NewDri&" "&chr(34)&strFolder&chr(34),0,true
      End If
   End If
   '延时1秒(10000为10秒)
   Wscript.Sleep 1000
Loop
[ Last edited by newxso on 2010-1-8 at 20:22 ]