中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求高手~(监测到U盘后自动执行一个文件的批处理)
作者:
标题: 求高手~(监测到U盘后自动执行一个文件的批处理) 上一主题 | 下一主题
cb9020291
初级用户





积分 25
发帖 11
注册 2006-4-25
状态 离线
『楼 主』:  求高手~(监测到U盘后自动执行一个文件的批处理)

每10秒监测一次,当电脑插上U盘后,自动执行一个文件。请问该如何实现?

2010-1-8 15:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clamber
初级用户





积分 46
发帖 39
注册 2008-11-2
状态 离线
『第 2 楼』:  

用计划任务每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 ]

2010-1-8 17:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clamber
初级用户





积分 46
发帖 39
注册 2008-11-2
状态 离线
『第 3 楼』:  

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


2010-1-8 18:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 4 楼』:  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 ]

2010-1-8 19:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: