[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何打开指定目录下(包含子目录)的ppt文件并另存到其他目录

本帖最后由 pcl_test 于 2016-7-16 14:34 编辑

请教:搜索某个目录(比如D:\课件,包含子目录)下的所有ppt文件,逐一打开然并以原文件名另存到另一个目录下(比如E:\temp)后关闭,直到所有的文件都执行完毕。请问这个批处理怎么写?先谢谢了。

或者谁能告诉我,如何用批处理命令实现对ppt文件的另存为也可以,不是复制,是打开后另存为哦。谢谢。

TOP

本帖最后由 pcl_test 于 2016-7-16 00:51 编辑

回复 3# gawk


    回楼上的:原因比较特殊,极少数人会碰到这个问题。由于我的课件被内部加入了水印,直接拷贝出去在别的电脑会无法读取。但如果先打开后再另存为到一个特殊目录,即可脱掉水印,就可以拷贝了。课件比较多,所以希望批处理。方法不限,能用VBS语法实现也行。

TOP

我编写了一个脚本,但该脚本只能找到“C:\”根目录下的ppt文件,如何找到某目录(包含子目录)下的所有ppt文件并进行保存?我的脚本如下:
strComputer = "."
on error resume next
Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set pptApp = CreateObject("PowerPoint.application")
Set FileList = objWMIService.ExecQuery _
     ("ASSOCIATORS OF {Win32_Directory.Name='c:'} Where " _
         & "ResultClass = CIM_DataFile")
For Each objFile In FileList
     If objFile.Extension = "ppt" Then
  pptApp.visible = true
  Set pptSelection = pptApp.Presentations.Open("c:\" & objFile.FileName & "." & objFile.Extension)
  pptSelection.SaveAs("c:\" & objFile.FileName & "2.ppt")
  pptSelection.close
     End If
Next
pptApp.quit

TOP

本帖最后由 hzliew 于 2016-7-16 11:21 编辑

回复 6# WHY


    谢谢,不过失败了。我将你的代码保存为convert.bat,放在D:\test 下运行(该目录放了一个样本ppt文件),得到出错提示:
D:\test\convert.bat<11,1>Microsoft JScript 运行时错误: Automation 服务器不能创建对象

请按任意键继续...

我的系统为XP系统,是否跟系统有关?

TOP

问题出在var objApp = new ActiveXObject('PowerPoint.Application');这一行上。难道XP系统对调用ActiveXObject很敏感?

TOP

本帖最后由 hzliew 于 2016-7-16 12:40 编辑
试试vbs会不会报错
pcl_test 发表于 2016-7-16 12:29



    WIN7下测试成功,下面试试XP系统

TOP

回复  hzliew

ppt的所在文件夹你改成你自己的没?
pcl_test 发表于 2016-7-16 12:38



    不好意思,刚忘了改。改了WIN7下是成功的,现在看看XP。
1

评分人数

    • pcl_test: 代码部分使用 [code][/code] 标记括起来;指 ...PB -4

TOP

本帖最后由 hzliew 于 2016-7-16 12:55 编辑

怎么插入截图啊,XP系统下还是那个问题,第3行:ActiveX部件不能创建对象:“PowerPoint application”,看来这是XP系统的顽疾。。。

TOP

本帖最后由 hzliew 于 2016-7-16 15:53 编辑
回复  hzliew

xp你重新安装微软的Office软件
pcl_test 发表于 2016-7-16 14:11



    真没想到是office自身的问题,重装office就好了,谢谢您的提醒。再次感谢您以及6楼的兄弟,以非常牛X的而且不同的思路和视角解决了此问题。

追加一个问题:能否在保存这些文件时保持原来文件的目录结构?比如,源目录中D:\test\chap1\1.ppt, D:\test\chap2\1.ppt, D:\test\chap3\1.ppt, 转换到E:\Temp后,分别为E:\Temp\chap1\1.ppt,E:\Temp\chap2\1.ppt,E:\Temp\chap3\1.ppt,也就是让那些上千个ppt文件分别保存在各自不同的章节目录里,只是根目录变了,其他不变?
1

评分人数

    • pcl_test: 指定回应某楼层的在相应楼层点回复,少引用PB -2

TOP

本帖最后由 pcl_test 于 2016-7-24 19:47 编辑

回复 10# pcl_test

我仿照您的代码来转换doc文档,为何提示33行类型不匹配:
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set wordApp = CreateObject("Word.application")
  3. Set ws = CreateObject("WScript.Shell")
  4. wordApp.visible = true
  5. srcFolder = "D:\test"  '源文件夹
  6. dstFolder = "E:\Temp"  '目标文件夹
  7. If Not fso.FolderExists(dstFolder) Then fso.CreateFolder(dstFolder)
  8. Call getSubFiles(srcFolder, "doc")
  9. wordApp.Quit
  10. msgbox "Done"
  11. '遍历文件夹查找指定扩展名文件
  12. Function getSubFiles(path, extension)
  13.     Set Folder = fso.GetFolder(path)
  14.     Set SubFolders = Folder.SubFolders
  15.       
  16.     Set Files = Folder.Files
  17.     For Each File In Files
  18.         If LCase(Right(File.Name, Len(extension))) = LCase(extension) Then
  19.             SaveAsDOC Folder, file
  20.         End If
  21.     Next
  22.       
  23.     For Each SubFolder In SubFolders
  24.         Call getSubFiles(SubFolder.Path, extension)
  25.     Next
  26.    
  27.     Set Folder = nothing
  28.     Set SubFolders = nothing
  29. End Function
  30. Function SaveAsDOC(folder, file)  '增加保留源文件目录结构
  31.     newpath = replace(LCase(Left(folder.Path, Len(srcFolder)))&Mid(folder.Path, Len(srcFolder)+1), LCase(srcFolder), dstFolder)
  32.     If Not fso.FolderExists(newpath) Then ws.run "cmd /c md """&newpath&"", 0
  33.     Set doc = wordApp.Documents.Open(file.Path)
  34.     doc.SaveAs(newpath&"\"&file.Name)
  35.     doc.Close
  36. End Function
复制代码

TOP

回复 19# WHY


    还是您火眼金睛啊。。。

TOP

回复  hzliew
WHY 发表于 2016-7-16 18:00



    哇塞,兄弟真牛B,代码简洁,堪称完美!佩服佩服!

TOP

回复  hzliew

17楼已改
pcl_test 发表于 2016-7-16 19:10



    经测试运行,您的代码正确无误。至此,问题圆满解决,谢谢!

TOP

返回列表