首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用批处理文件解压缩具有动态名称的文件?

如何使用批处理文件解压缩具有动态名称的文件?
EN

Stack Overflow用户
提问于 2020-03-18 07:20:27
回答 1查看 120关注 0票数 0

我所要做的就是通过批处理文件自动完成解压缩过程,并在文件名是静态的情况下(下面提到)进行同样的调度。

代码语言:javascript
运行
复制
@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "D:\QlikSense\Data\OBL\FTP\" "D:\QlikSense\Data\OBL\FTP\T56Q_OBL001_20200312111131.zip"
Call :UnZipFile "D:\QlikSense\Data\OBL\FTP\" "D:\QlikSense\Data\OBL\FTP\T56Q_OBL002_20200312111131.zip"

exit /b

:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs%  echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%

timeout 20

但是,当使用‘*’为动态创建它时,同样的方法不起作用(请参阅下面的代码)

代码语言:javascript
运行
复制
@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "D:\QlikSense\Data\OBL\FTP\" "D:\QlikSense\Data\OBL\FTP\T56Q_OBL001_*.zip\"
Call :UnZipFile "D:\QlikSense\Data\OBL\FTP\" "D:\QlikSense\Data\OBL\FTP\T56Q_OBL002_*.zip\"

exit /b

:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs%  echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%

timeout 20

以下是反映情况的错误

C:\Users\TECHADMIN\Appdata\Local\Temp\4_.vbs(6,1)微软VBScript运行时错误:所需对象:“objShell.NameSpace(.)”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-18 08:47:05

代码语言:javascript
运行
复制
@echo off
setlocal
cd /d "%~dp0"
Call :UnZipFile "D:\QlikSense\Data\OBL\FTP\" "D:\QlikSense\Data\OBL\FTP\T56Q_OBL001_*.zip"
Call :UnZipFile "D:\QlikSense\Data\OBL\FTP\" "D:\QlikSense\Data\OBL\FTP\T56Q_OBL002_*.zip"

exit /b

:UnZipFile <ExtractTo> <NewZipFile>
set "vbs=%temp%\_.vbs"
if exist "%vbs%" del /f /q "%vbs%"

(   echo strExtractTo = WScript.Arguments.Item(0^)
    echo strNewZipFile = WScript.Arguments.Item(1^)
    echo WScript.echo strExtractTo,  strNewZipFile
    echo set objFSO = CreateObject("Scripting.FileSystemObject"^)
    echo if not objFSO.FolderExists(strExtractTo^) Then
    echo   fso.CreateFolder(strExtractTo^)
    echo end if
    echo set objShell = CreateObject("Shell.Application"^)
    echo set FilesInZip = objShell.NameSpace(strNewZipFile^).items
    echo objShell.NameSpace(strExtractTo^).CopyHere(FilesInZip^)
    echo Set objFSO = Nothing
    echo Set objShell = Nothing
) > "%vbs%"

for %%A in ("%~2") do cscript //nologo "%vbs%" "%~1" "%%~A"
if exist "%vbs%" del /f /q "%vbs%"
timeout 20

为VBScript添加了参数处理,并使用for循环来处理zip文件名中使用的星号通配符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60734998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档