批处理文件以解压缩文件并运行Python脚本

批处理文件以解压缩文件并运行Python脚本,python,batch-file,unzip,Python,Batch File,Unzip,我有一个项目,需要解压缩包含.xls文件的文件,然后运行Python脚本将文件转换为.xlsx。我需要通过Windows任务调度器执行Windows批处理文件来完成此操作。我在Superuser上找到了一些解压文件的代码,但它不会循环,您必须显式键入要解压的文件名 以下是解压缩代码: @echo off setlocal cd /d %~dp0 Call :UnZipFile "C:\Test Folder\" "C:\Test Folder\File1.zip" exit /b :UnZip

我有一个项目,需要解压缩包含
.xls
文件的文件,然后运行Python脚本将文件转换为
.xlsx
。我需要通过Windows任务调度器执行Windows批处理文件来完成此操作。我在Superuser上找到了一些解压文件的代码,但它不会循环,您必须显式键入要解压的文件名

以下是解压缩代码:

@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "C:\Test Folder\" "C:\Test Folder\File1.zip"
exit /b

:UnZipFile <ExtractTo> <newzipfile>
IF "%~dp0"=="" GOTO Continue
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%
任何帮助都会很好。

@echo off
setlocal
cd/d“%~dp0”| |退出/b 1
对于(*.zip)中的%%A,请执行以下操作(
调用:解压文件“%cd%\”“%%~fA”
对于(*.xls)中的%%B,请执行以下操作(
echo python mypython.py--sourcefilepath“%cd%”--sourcefilename“%%~nxB”
del“%%~B”
)
)
退出/b
:UnZipFile
如果“%~dp0”==”退出/b 1
设置“vbs=%temp%\\.vbs”
如果存在“%vbs%”删除/f/q“%vbs%”
(
echo Set fso=CreateObject(“Scripting.FileSystemObject”^)
echo如果不是fso.FolderExists(“%1”^),则
echo fso.CreateFolder(“%~1”^)
回显结束If
echo set objShell=CreateObject(“Shell.Application”^)
echo set FilesInZip=objShell.NameSpace(“%~2”^).items
echo objShell.NameSpace(“%~1”^).CopyHere FilesInZip,16
回波设置fso=无
echo Set objShell=无
)>%vbs%
cscript//nologo“%vbs%”
如果存在“%vbs%”删除/f/q“%vbs%”
只是对特殊角色的一些小修改 需要在
echo
命令中转义。 用
退出/b 1
替换了
转到继续
。 为循环添加了简单的
,以获取所有zip文件名

它将获取当前目录中的xls文件 一旦python脚本启动,就删除xls文件 已完成SaveAs任务

如果选中为OK,则删除python命令前面的
echo


或者试试这个python代码,它可以 循环、解压缩和xls到xlsx

将win32com.client作为win32导入
导入argparse
导入glob
导入操作系统
进口拉链
def xls_至_xlsx(文件名,文件路径=无):
如果不是文件路径:
filepath=os.getcwd()
fname=os.path.join(文件路径,文件名)
excel=win32.gencache.EnsureDispatch('excel.Application')
wb=excel.Workbooks.Open(fname)
wb.SaveAs(fname+“x”,FileFormat=56)
wb.Close()
excel.Application.Quit()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
对于glob.iglob('*.zip')中的zip_文件:
zipfile.zipfile(zip_文件)作为r:
r、 提取器()
对于glob.iglob('*.xls')中的xls_文件:
xls_到xlsx(xls_文件)
删除操作系统(xls_文件)
它不设置当前工作目录 哪个任务调度器可以设置它,或者您可以
可以将其添加到python脚本中进行设置。

似乎让python脚本进行解压缩和循环会更容易,只需使用批处理文件调用脚本即可。谢谢。我最终用Python做了所有的事情。
import win32com.client as win32
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--sourcefilepath')
parser.add_argument('--sourcefilename')
args = parser.parse_args()

fname = r"{sourcefilepath}{sourcefilename}".format(sourcefilepath=args.sourcefilepath,sourcefilename=args.sourcefilename)

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname + "x", FileFormat = 56)

wb.Close()                                 
excel.Application.Quit()
quit()