用于解压缩文件和 运行 Python 脚本的批处理文件
Batch file to unzip files and run Python script
我有一个项目,我需要解压缩包含 .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%
这是我的 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()
任何帮助都会很棒。
@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
循环以获取所有 zip 文件名。
获取当前目录下的xls文件
并在 python 脚本后删除 xls 文件
已完成另存为任务。
删除 python 命令前面的 echo
如果检查正常。
或者试试这个 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脚本中设置。
我有一个项目,我需要解压缩包含 .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%
这是我的 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()
任何帮助都会很棒。
@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
循环以获取所有 zip 文件名。
获取当前目录下的xls文件 并在 python 脚本后删除 xls 文件 已完成另存为任务。
删除 python 命令前面的 echo
如果检查正常。
或者试试这个 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脚本中设置。