|
|
本帖最后由 LTSC1809 于 2025-7-20 13:57 编辑
- Dim oShApp,oSourceFile,oItem,oTarget,oArgs,nOptions,oFs,sLibTemp
- Randomize
- sLibTemp="CLauncherTemp_"&CStr(Int(10*Rnd()))&CStr(Int(10*Rnd()))&CStr(Int(10*Rnd()))
- Set oArgs=WScript.Arguments
- Set oFs=CreateObject("Scripting.FileSystemObject")
- oFs.MoveFile oArgs.Item(0),oArgs.Item(0)&".zip"
- Set oShApp=CreateObject("Shell.Application")
- If oFs.FolderExists(oArgs.Item(1))=False Then oFs.CreateFolder(oArgs.Item(1))
- Do While(oFs.FolderExists(sLibTemp)=True)
- sLibTemp="CLauncherTemp_"&CStr(Int(10*Rnd()))&CStr(Int(10*Rnd()))&CStr(Int(10*Rnd()))
- Loop
- Set oSourceFile=oShApp.NameSpace(oArgs.Item(0)&".zip")
- Set oItem=oSourceFile.Items()
- oFs.CreateFolder(sLibTemp)
- Set oTarget=oShApp.NameSpace(sLibTemp)
- nOptions=256
- oTarget.CopyHere oItem,nOptions
- oFs.MoveFile oArgs.Item(0)&".zip",oArgs.Item(0)
- oFs.CopyFile sLibTemp&"\*.dll",oArgs.Item(1),True
- oFs.DeleteFolder(sLibTemp)
复制代码 如上代码用于把传入的第一个参数(一个jar文件)解压到指定文件夹(第二个参数指定文件夹)。Shell.Application解压文件的方法我是从网上抄的。由于它只支持后缀是.zip的文件,jar虽然也是zip格式但是它不认,所以先把源文件jar加上.zip,解压完毕再改回来。由于直接解压到目标文件夹如果已经存在会弹窗询问是否替换,所以创建临时文件夹,把文件解压到临时文件夹,再复制到目标文件夹,设置替换,就不会弹窗询问是否替换了。由于需要这个脚本同时启动多个进程解压不同文件,因此创建一个目前不存在的随机数临时文件夹。现在的问题是,我一开始采用直接解压到目标文件夹的方式时,工作正常,现在加入了临时文件夹却会在Set oItem=oSourceFile.Items()这里报错提示缺少对象。使用vbsedit调试发现这里oSourceFile为Nothing。明明这个文件(oArgs.Item(0)&".zip"已经存在了,我在这里用oFs.FileExist检查也确实提示文件已经存在了,但是NameSpace方法还是返回Nothing?麻烦大佬们帮忙看看,谢谢! |
|