用批处理文件实现Excel和word文件的重造
我们知道,excel或wps的电子表格文件(后缀名为.xlsx)实际就是一个标准的zip压缩文件,我们可以通过以下手动流程对此文件实现重造:将.xlsx文件改名为.zip文件,用winRar等压缩文件进行解压缩,得到一目录,目录中主要是一堆.xml文件,再用winRar将此文件打包成标准zip文件,注意选择“zip”格式的压缩方式为“存储”,将压缩包的zip扩展名改为xlsx即完成了Excel文件的重造,下面用一批处理文件来自动实现此重造过程,批处理中用到的的winrar压缩软件,如winrar安装目录不同,按实际安装目录更改内容,使用时,只需将excel文件拖到此bat批处理文件上即可自动完成重造功能。批处理文件:拖excel到我.bat文件内容如下:
@echo off
setlocalif "%~1"=="" (echo 请将excel文件拖放到此批处理上pauseexit /b 1
)set "INPUT=%~1"
set "NAME=%~n1"
set "DESKTOP=%USERPROFILE%\Desktop"
set "WORK=%DESKTOP%\新EXCEL"
set "OUTPUT=%WORK%\%NAME%_new.xlsx"echo 正在处理 %INPUT%REM 创建临时目录:如拖放的文件名中存在空格如不处理,会造成分别创建数个目录
echo %WORK%
mkdir %WORK% 2>nulREM 查找winRar
set RAR=
for %%i in ("C:\Program Files\WinRAR\WinRAR.exe" "C:\Program Files (x86)\WinRAR\WinRAR.exe") do (if exist %%i set "RAR=%%i"
)if %RAR%=="" (echo 错误:没有找到winRAR软件pauseexit /b 1)REM 复制并重命名为ZIP
echo copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nul
copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nulREM 解压
%RAR% x -o+ -inul "%WORK%\%NAME%.zip" "%WORK%\extracted\" REM 重新打包(zip存储格式)
echo "%RAR%" a -afzip -m0 -r -ep1 -inul "%WORK%\%NAME%_new.zip" "%WORK%\extracted\*"
%RAR% a -afzip -m0 -r -ep1 -inul "%WORK%\%NAME%_new.zip" "%WORK%\extracted\*"REM 重新打包的zip文件再创建Excel文件
copy /y "%WORK%\%NAME%_new.zip" "%OUTPUT%" >nulREM 删除全部中间文件
rmdir /s /q "%WORK%\extracted" 2>nul
del /q "%WORK%\%NAME%_new.zip" 2>nul
del /q "%WORK%\%NAME%.zip" 2>nulecho 新生成的excel文件完成
echo 按任意键打开文件位置
explorer /select,"%OUTPUT%"endlocal
同理,对扩展名为.docx的文件又如何进行重造呢,这里采用系统自带的写字板作为文本内容中转来尝试完成重造,手动方法为:打开docx类型文档,选择全部文本内容并复制,打开写字板,粘贴全部文本内容,保存为.rtf或.docx文件,从而实现对文档的重造。用一个批处理文件来自动化实现上面的全部过程,批处理文件:拖word文件到我.bat
@echo off
setlocal enabledelayedexpansion:: doc文档工具
:: 需要系统安装word或wpsif "%~1"=="" (echo 请将word文件拖放到此批处理上pauseexit /b 1
)set "INPUT=%~1"
set "NAME=%~n1"
SET "FORMAT=rtf"set "DESKTOP=%USERPROFILE%\Desktop":: 注意:因要打开写字板保存对话框自动录入文件名,如果文件路径中有中文件,会造成录入混乱,故路径中工作目录必须为英文,文件名先固定为new.doc,保存成功后再处理
set "WORK=%DESKTOP%\WORD"
set "OUTPUT=%WORK%\new.docx"echo 正在处理 %INPUT%
echo 保存的文件名为:"%OUTPUT%"REM 创建临时目录:如拖放的文件名中存在空格如不处理,会造成分别创建数个目录
echo %WORK%
mkdir %WORK% 2>nulif "%INPUT%"=="" (echo 用法:拖文件到此批处理文件上pauseexit /b 1
)echo 准备处理拖入的文件:%INPUT%:: 检查拟创建的临时文件是否有,如有先删除,防止覆盖时提示覆盖
if exist "%OUTPUT%" (del %OUTPUT%
) :: 创建VBS脚本处理doc文档:打开word或wps复制文本
set "DOC_OPENTYPE=word.exe"
set "VBS_COPYDOC=%WORK%\doc_copy.vbs"
echo 准备创建脚本文件:!VBS_COPYDOC!
(
echo Set word = CreateObject^("Word.Application"^)
echo DOC_OPENTYPE = "word.exe" '当前系统默认打开docx文件的应用是office中的word.exe
echo on Error Resume Next
echo If Err.Number ^<^> 0 Then
echo Set word = CreateObject^("Kwps.Application"^)
echo DOC_OPENTYPE="wps.exe" '当前系统默认打开docx文件的应用是wps中的wps.exe
echo End If
echo On Error Goto 0
echo.
echo word.Visible = False
echo word.DisplayAlerts = False
echo.
echo Set doc = word.Documents.Open^("!INPUT!"^)
echo doc.Content.Select
echo doc.Content.Copy
echo.
echo doc.Close False
echo word.Quit
) > "!VBS_COPYDOC!"echo 创建VBS脚本完成: "%VBS_COPYDOC%":: 执行VBS脚本复制内容到剪贴板
echo 正在复制文档内容 "%VBS_COPYDOC%"
cscript //nologo "%VBS_COPYDOC%"
if %errorlevel% neq 0 (echo 错误:无法使用word或wps打开文档REM del "%VBS_COPYDOC%"REM exit /b 1
):: 等待复制完成
timeout /t 5 /nobreak >nul:: 创建另一个VBS脚本通过写字板保存
set "VBS_NEW=%WORK%\wordpad_save.vbs"
(
echo Set WshShell = WScript.CreateObject^("WScript.Shell"^)
echo.
echo '启动写字板
echo WshShell.Run "write.exe",1,False
echo WScript.Sleep 2000
echo.
echo '粘贴内容
echo WshShell.SendKeys "^(v)"
echo WScript.Sleep 4000
echo.
echo '打开保存对话框
echo WshShell.SendKeys "^(s)"
echo WScript.Sleep 1000
echo.
echo '确保焦点在文件名输入框echo WshShell.SendKeys "^a" '全选输入框中文字
echo WScript.Sleep 500
echo WshShell.SendKeys "{DEL}" '删除输入框中文字
echo WScript.Sleep 500
echo.
echo '输入文件名
echo WshShell.SendKeys "%OUTPUT%"
echo WScript.Sleep 6000
echo WshShell.SendKeys "{ENTER}"
echo WScript.Sleep 500
echo.echo '确认保存
echo WshShell.SendKeys "%%s"
echo WScript.Sleep 2000echo.
echo '关闭写字板echo WShShell.SendKeys "%%{F4}"
) > "%VBS_NEW%"echo 创建VBS脚本完成: "%VBS_NEW%":: 执行VBS脚本通过写字板保存
echo 正在执行脚本通过写字板保存文件内容......
cscript //nologo "%VBS_NEW%":: 等待保存完成
timeout /t 3 /nobreak >nul:: 检查文件是否成功创建
if exist "%OUTPUT%" (echo doc文件处理完成:%OUTPUT%
) else (echo 错误:文件保存失败exit /b 1
):: 设置最终要用写字板write.exe保存的文本
set "WRITE_FILE=%WORK%\%NAME%_new.docx"
copy "%OUTPUT%" "%WRITE_FILE%"
timeout /t 2 /nobreak >nulecho 删除两个vbs文件和一个无中文的new.docx临时文件
del "%VBS_COPYDOC%"
del "%VBS_NEW%"
del "%OUTPUT%"echo 用写字板另存的docx文件: "%WRITE_FILE%" 成功,按任意键退出...
explorer /select,"%WRITE_FILE%"
explorer /select,"%WRITE_FILE%"
pause >nul
上面两个批处理有什么用处呢,这里就不明示了,仅对大家常用的两种文档进行重造自动化处理的方法进行了探讨。