用批处理文件实现Excel和word文件的重造

我们知道,excel或wps的电子表格文件(后缀名为.xlsx)实际就是一个标准的zip压缩文件,我们可以通过以下手动流程对此文件实现重造:将.xlsx文件改名为.zip文件,用winRar等压缩文件进行解压缩,得到一目录,目录中主要是一堆.xml文件,再用winRar将此文件打包成标准zip文件,注意选择"zip"格式的压缩方式为"存储",将压缩包的zip扩展名改为xlsx即完成了Excel文件的重造,下面用一批处理文件来自动实现此重造过程,批处理中用到的的winrar压缩软件,如winrar安装目录不同,按实际安装目录更改内容,使用时,只需将excel文件拖到此bat批处理文件上即可自动完成重造功能。批处理文件:拖excel到我.bat文件内容如下:

vbscript 复制代码
@echo off
setlocal

if "%~1"=="" (
  echo 请将excel文件拖放到此批处理上
  pause
  exit /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>nul


REM 查找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软件
   pause
   exit /b 1
 )

REM 复制并重命名为ZIP
echo  copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nul
copy /y "%INPUT%" "%WORK%\%NAME%.zip" >nul

REM 解压
%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%" >nul

REM 删除全部中间文件
rmdir /s /q "%WORK%\extracted"  2>nul
del  /q "%WORK%\%NAME%_new.zip" 2>nul
del /q "%WORK%\%NAME%.zip" 2>nul

echo 新生成的excel文件完成
echo 按任意键打开文件位置 
explorer /select,"%OUTPUT%"

endlocal

同理,对扩展名为.docx的文件又如何进行重造呢,这里采用系统自带的写字板作为文本内容中转来尝试完成重造,手动方法为:打开docx类型文档,选择全部文本内容并复制,打开写字板,粘贴全部文本内容,保存为.rtf或.docx文件,从而实现对文档的重造。用一个批处理文件来自动化实现上面的全部过程,批处理文件:拖word文件到我.bat

vbscript 复制代码
@echo off
setlocal enabledelayedexpansion

:: doc文档工具
:: 需要系统安装word或wps

if "%~1"=="" (
  echo 请将word文件拖放到此批处理上
  pause
  exit /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>nul

if "%INPUT%"=="" (
  echo 用法:拖文件到此批处理文件上
  pause
  exit /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 2000

echo.
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 >nul

echo 删除两个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

上面两个批处理有什么用处呢,这里就不明示了,仅对大家常用的两种文档进行重造自动化处理的方法进行了探讨。

相关推荐
CDA数据分析师干货分享43 分钟前
汉江师范学院数据科学与大数据技术专业大二学生:CDA一级学习经验
大数据·经验分享·学习·数据分析·cda证书·cda数据分析师
傻啦嘿哟1 小时前
Python 操作 Excel 条件格式指南
开发语言·python·excel
ccchen8881 小时前
适配帝国CMS 8.0:全新帝国CMS免登录采集发布插件
经验分享·爬虫·php·帝国cms自动采集发布插件·帝国cms8.0·帝国cms自动采集插件·帝国cms采集发布模块
热爱生活的五柒2 小时前
word中如何一键修改英文字母数字为新罗马字体Times New Roman
word·西文·times new roman
韦达AI视觉2 小时前
算法合集 | 扶梯跌倒检测
经验分享
2501_926978332 小时前
“术“与“道“的平衡---“缺失“与“完整”的统一
经验分享·笔记·ai写作
智者知已应修善业2 小时前
【51单片机用两个定时计数器级联实现定时】2023-04-12
c语言·经验分享·笔记·算法·51单片机
中屹指纹浏览器3 小时前
2026高并发多账号运营下指纹浏览器性能调优与工程化实践
经验分享·笔记
浅念-5 小时前
C ++ 智能指针
c语言·开发语言·数据结构·c++·经验分享·笔记·算法