0%

自动复制U盘内容(VBS&BAT简单版)

该脚本测试环境在win8.1(好像我下面都写的win8,不用在意这些细节)和win7(bat请求管理员权限)下测试通过。理论上关UAC就可以用了。

有人问XP能不能用。。XP是没有UAC的,当然能用。。另外整个测试过程中大数字都开着,并没有任何异常提示。

哦对了,大数字就是360。

至于UAC是什么鬼。。就是vista中引进的那套极其蛋疼的机制——用管理员身份运行。

为了一个奇怪的需求写的,针对的是需求中那台特定的电脑,所以有的地方我就用了一些奇怪的方法。如果要写个通用的出来要考虑很多东西,心塞塞。

先说说这个奇怪的需求。一台可以使用的win7电脑,将自动复制U盘功能添加到开机启动中。要求复制内容时已经复制过的不复制,复制那些源时间比目标时间新的文件。

按理说bat就能解决这事,但是我印象里用vbs写过的,就去抄来一段vbs并且修改了一下。原vbs中复制文件和文件夹是这么干的:

fso.copyfile file,folder
fso.copyfolder file,folder
'file,folder为参数

但是这在win8下并不好使,可能是权限问题,于是我就将这个功能用bat代替了。vbs下调用bat的代码为:

set ws=createobject("wscript.shell")
ws.run "cmd /c "&fpath&"fuck.bat",vbhide

fpath为相对路径,应该这么得到它:

Dim fpath
fpath=WScript.ScriptFullName
fpath=Left(fpath,InStrRev(fpath,"\"))

bat中这么写可以替换vbs中复制的两句:

xcopy  G:\ E:\USB_back /e /y /d /x

‘参数中包含“复制那些源时间比目标时间新的文件”的要求。

但是win8下测试时发现并不好使,于是给bat加上了一段请求管理员权限,放在@echo off后面

cd /d %~dp0
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 正在请求临时管理员权限...
goto UACPrompt
) else ( goto getAdmin )
:UACPrompt
(echo Set UAC = CreateObject("Shell.Application"^)
echo UAC.ShellExecute "cmd.exe", "/c %~s0", "", "runas", 1)> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:getAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:Start
rem start后面放xcopy那行代码

顺利测试通过。鉴于那台电脑是可以碰到的,我就建议把UAC关了。。。然后不就完事了么!!

参考教程:

关闭UAC教程

给win7添加启动项

贴上fuck-u-disk.vbs的代码:这段代码我删删改改的,写的不是很整齐哈

Dim ws,fpath
set fso=createobject("scripting.filesystemobject")
set ws=createobject("wscript.shell")
Set shell=Wscript.createobject("wscript.shell")
dim USB, file, folder, files
'获得vbs路径
fpath=WScript.ScriptFullName
fpath=Left(fpath,InStrRev(fpath,"\"))
USB="G:\" '请修改成正确的U盘盘符,并在fuck.bat下修改为同样的盘符
folder="E:\USB_back\" '请修改成需要复制到的文件夹,******注意以\结尾******
if FSO.FolderExists(folder) then
else FSO.CreateFolder(folder)
end if
on error resume next
do
wscript.sleep 1000
if fso.driveexists(USB) then
ws.run "cmd /c "&fpath&"fuck.bat",vbhide
wscript.sleep 20000
end if
loop

还有fuck.bat:

@echo off
xcopy G:\ E:\USB_back /e /y /d /x
rem G:\是U盘盘符,E:\USB_back是要复制到的文件夹,自己改去

最后贴上一些注意点:

在自己电脑上测试完之后请去任务管理器里面找找有没有这些程序,有就给关了,不然它就一直呆你内存里逗你玩:

(win8请在任务管理器里点详细信息,不然你啥都看不到)

win8下:
microsoft windows based script host
控制台窗口主进程

win7/xp下:
cmd.exe
VBScript.exe

这个程序里是21秒扫描一次U盘的。

fuck-u-disk.vbs中有这么一行:

wscript.sleep 20000

20000的单位是ms,要改时间的话就该找个数字,自己控制下就好。