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

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

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

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

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

TOP

能够介绍一下这样操作的目的是啥?
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

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

拿去花
  1. @if (0)==(0) echo off
  2. set "srcDir=D:\test"
  3. set "dstDir=E:\Temp"
  4. md "%dstDir%" 2>nul
  5. dir /b /a-d /s "%srcDir%\*.ppt" | cscript //nologo //e:jscript "%~f0" "%dstDir%"
  6. pause & exit
  7. @end
  8. var dstDir = WSH.Arguments(0) + '\\';
  9. var fso = new ActiveXObject('Scripting.FileSystemObject');
  10. var objApp = new ActiveXObject('PowerPoint.Application');
  11. objApp.Visible = true;
  12. while(!WSH.StdIn.AtEndOfStream){
  13.     var strFile = WSH.StdIn.ReadLine();
  14.     var strName = fso.GetBaseName(strFile);
  15.     var strNewFile = dstDir + strName + '.ppt';
  16.     var i = 0;
  17.     while(fso.FileExists(strNewFile))strNewFile = dstDir + strName + '(' + (++i) + ').ppt';
  18.     var objPres = objApp.Presentations.Open(strFile, false, false, false);
  19.     objPres.SaveAs(strNewFile, 1, false);
  20.     objPres.Close();
  21. }
  22. objApp.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

回复 7# hzliew


    6楼代码,win7 64系统测试成功。

TOP

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

TOP

本帖最后由 pcl_test 于 2016-7-16 19:05 编辑

试试vbs会不会报错
  1. Dim i
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set pptApp = CreateObject("PowerPoint.application")
  4. pptApp.visible = true
  5. srcFolder = "D:\ppt"  '源文件夹
  6. dstFolder = "E:\另存"  '目标文件夹
  7. If Not fso.FolderExists(dstFolder) Then fso.CreateFolder(dstFolder)
  8. Call getSubFiles(srcFolder, "ppt")
  9. pptApp.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.             SaveAsPPT 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 SaveAsPPT(file)
  31.     i=i+1  '避免重名
  32.     Set ppt = pptApp.Presentations.Open(file.Path)
  33.     ppt.SaveAs(dstFolder&"\"&i&"_"&file.Name)
  34.     ppt.Close
  35. End Function
复制代码

TOP

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



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

TOP

回复 11# hzliew

ppt的所在文件夹你改成你自己的没?

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

回复 14# hzliew

xp你重新安装微软的Office软件
  1. Set pptApp = CreateObject("PowerPoint.application")
  2. file = "D:\ppt\2.ppt"  'ppt文件
  3. pic = "D:\ppt\2.jpg"  '需插入的图片
  4. pptApp.visible = true
  5. Set ppt = pptApp.Presentations.Open(file)
  6. Set slide = ppt.Slides(1)  '第一张幻灯片
  7. Call slide.Shapes.AddPicture(pic, False, True, 100, 100, 400, 400)  '插入图片
复制代码

TOP

返回列表