@echo off
setlocal
cd /d "%~dp0" || exit /b 1
for %%A in (*.zip) do (
call :UnZipFile "%cd%\" "%%~fA"
for %%B in (*.xls) do (
echo python mypython.py --sourcefilepath "%cd%" --sourcefilename "%%~nxB"
del "%%~B"
)
)
exit /b
:UnZipFile <ExtractTo> <newzipfile>
if "%~dp0" == "" exit /b 1
set "vbs=%temp%\_.vbs"
if exist "%vbs%" del /f /q "%vbs%"
(
echo Set fso = CreateObject("Scripting.FileSystemObject"^)
echo If NOT fso.FolderExists("%~1"^) Then
echo fso.CreateFolder("%~1"^)
echo End If
echo set objShell = CreateObject("Shell.Application"^)
echo set FilesInZip=objShell.NameSpace("%~2"^).items
echo objShell.NameSpace("%~1"^).CopyHere FilesInZip, 16
echo Set fso = Nothing
echo Set objShell = Nothing
) > "%vbs%"
cscript //nologo "%vbs%"
if exist "%vbs%" del /f /q "%vbs%"
Только некоторые незначительные исправления специальных символов, которые необходимо экранировать в командах echo
. Заменено goto continue
на exit /b 1
. Добавлен простой for
l oop для получения всех имен файлов zip.
Он получит файлы xls в текущем каталоге и удалит файлы xls после того, как сценарий python выполнит задачу SaveAs.
Удалите echo
перед командой python, если отмечено как OK.
Или попробуйте этот код python, который выполняет циклическое выполнение, распаковку и xls в xlsx.
import win32com.client as win32
import argparse
import glob
import os
import zipfile
def xls_to_xlsx(filename, filepath=None):
if not filepath:
filepath = os.getcwd()
fname = os.path.join(filepath, filename)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname + "x", FileFormat = 56)
wb.Close()
excel.Application.Quit()
if __name__ == '__main__':
for zip_file in glob.iglob('*.zip'):
with zipfile.ZipFile(zip_file) as r:
r.extractall()
for xls_file in glob.iglob('*.xls'):
xls_to_xlsx(xls_file)
os.remove(xls_file)
Он не устанавливает текущий рабочий каталог, который может установить планировщик задач, или вы можете добавить его в сценарий python, чтобы установить его.