我所要做的就是通过批处理文件自动完成解压缩过程,并在文件名是静态的情况下(下面提到)进行同样的调度。
@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
但是,当使用‘*’为动态创建它时,同样的方法不起作用(请参阅下面的代码)
@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(.)”
发布于 2020-03-18 08:47:05
@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文件名中使用的星号通配符。
https://stackoverflow.com/questions/60734998
复制相似问题