批量文件将DOC文件转换为TXT

时间:2014-09-08 02:52:56

标签: batch-file

我在密码保护的word文件中列出了批处理代码(所以没有人可以编辑我的代码),我需要一个.bat文件,可以将我在那里列出的代码转换为.txt文件,我可以拥有它看了。如果你知道一种制作可以读取文字doc的.bat文件的方法,那也是值得赞赏的。

4 个答案:

答案 0 :(得分:2)

使用(经过测试的)混合批处理脚本(封装JScript):

@if (0)==(1) REM BatchScript: 
:INIT
 @ECHO OFF & CLS
 SET DOC=C:\Some folder\tst.doc
 SET TXT=C:\Some other folder\res.txt
 SET PWD=MySecretPass
:MAIN
 cscript //NoLogo //E:JScript "%~f0" /inp:"%DOC%" /outp:"%TXT%" /pass:"%PWD%"
 notepad "%TXT%"
 GOTO ENDBAT
:ENDBAT
 ECHO        Press any key to exit...&PAUSE>NUL
 GOTO :EOF
@end // JScript:

 var FSO = WScript.CreateObject("Scripting.FileSystemObject")
 ,   HND = FSO.CreateTextFile(WScript.Arguments.Named('outp'))
 ,   APP = WScript.CreateObject('Word.Application')
 ,   DOC, str
 ;
 APP.Visible=false;  //hide word
 DOC = APP.Documents       // access interface
          .Open( WScript.Arguments.Named('inp')        //file location
               , false                                 //ConfirmConversions
               , true                                  //ReadOnly
               , false                                 //AddToRecentFiles
               , WScript.Arguments.Named('pass') || '' //PasswordDocument
             //,   //PasswordTemplate
             //,   //Revert
             //,   //WritePasswordDocument
             //,   //WritePasswordTemplate
             //,   //Format
             //,   //Encoding
             //,   //Visible
             //,   //OpenConflictDocument
             //,   //OpenAndRepair
             //,   //DocumentDirection
             //,   //NoEncodingDialog
               );
 str=new String(DOC.Content);                //grab content
 str=str.replace(/\r\n|\r/g,'\r\n')+'\r\n';  //cleanup line-endings
 HND.Write( str );                           //write the file
 HND.Close();  //close file handle
 DOC.Close();  //close word doc
 APP.quit(0);  //don't forget to close word
  • 将其另存为批处理脚本,替换硬编码的输入文件DOC,输出文件TXT和密码PWD。请参阅npocmaka的答案,将其更改为接受batchscript调用的参数。
  • 您可能希望直接调用batchscript,而不是通过notepad运行生成的txt文件。
  • 您还可以删除:ENDBAT标签下提取的批处理文件。
  • 此外,(为了保持简单和核心),没有提供错误检查。
  • 最后,它需要安装MS Word(从Office 2000开始)。

用法:只需按自己的意愿运行即可。

<强>更新
在比较笔记和在chat进行测试之后,npocmaka和我得出结论,如果使用单词SaveAs,最安全的选择是使用2类型:wdFormatText 。更多关于npocmaka更新答案的内容 我的示例(使用FileSystemObject编写新文件)显示了一种更简单的方法,即对提取的文本进行后期处理,而不会更新单词的内部最近文件列表(M​​RU),否则会在word转换保存文件时更新。

在我们的两个答案之间有很多可供选择,所以快乐的混合!

答案 1 :(得分:1)

参见本页:

http://www.abisource.com/wiki/AbiCommand

描述了使用AbiWord可用的命令行选项,包括

converttotext "file\path\file.doc" "destingation\file.txt"

http://www.abisource.com/download/index.phtml

较小的安装可能是http://wvware.sourceforge.net/#wv,但显然开发人员认为这些实用程序被弃用&#34;并且可能不如使用AbiWord那么可靠。

这就是:见http://github.com/tobya/DocTo

答案 2 :(得分:1)

Here's a script that I've wrote long ago to save doc(x) to txt。这是accepts a password

的重写版本
'>nul 2>&1|| @copy /Y %windir%\System32\doskey.exe '.exe >nul
'&&@echo off && cls &&goto :end_vbs

Set WordApp = CreateObject("Word.Application")
WordApp.Visible = FALSE

'Open doc for reading

Set WordDoc = WordApp.Documents.Open(WScript.Arguments.Item(0),true,true,false,WScript.Arguments.Item(2))

'wdFormatText 2
'wdFormatUnicodeText 7
format = CInt(WScript.Arguments.Item(3) )
WordDoc.SaveAs WScript.Arguments.Item(1) ,format 
WordDoc.Close()
WScript.Quit

:end_vbs

'& if "%~1" equ "-help" echo %~n0 word_document  destination password [-unuicode] 
'& if "%~1" equ "" echo word document not given & exit /b 1
'& if not exist "%~f1" echo word document does not exist & exit /b 2
'& if "%~2" equ "" echo destination not given & exit /b 1
'& set "save_as=%~2"
'& if  exist "%~f2" del /s /q "%~f2"
'& if "%~4" equ "-unuicode" ( set "format=7") else ( set "format=2")
'& taskkill /im winword* /f >nul 2>&1
'& cscript /nologo /E:vbscript %~f0 "%~f1" "%save_as%" "%~3" %format% 
'& pause
'& del /q /f '.exe

这是一个批处理/ vbscript混合,您需要将其另存为.bat 注意 - 需要管理员权限才能启动“隐形”单词应用程序。

示例(如果文件保存为doc2txt.bat)(最好使用完整路径):

doc2txt.bat c:\tstpass.docx c:\result\tstpass.txt super_secret_password
doc2txt.bat c:\tstpass.docx c:\result\tstpass.txt super_secret_password -unicode

编辑 jscript / bat hybrid

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off

     if "%~1" equ "-help" echo %~n0 word_document  destination password [-unuicode|-breaks] 
     if "%~1" equ "" echo %~n0 word_document  destination password [-unuicode]
     if "%~2" equ "" echo destination not given & exit /b 1
     if "%~3" equ "" echo password not given & exit /b 3
     if  exist "%~f2" del /s /q "%~f2"
     if "%~4" equ "-unicode" ( 
        set "format=7"
    ) else (
       if "%~4" equ "-breaks" (
        set "format=3"
    ) else ( 
      set "format=2"
     )
    )

     :: kill winword application to avoid collisions
     taskkill /im winword* /f >nul 2>&1

     if not exist "%~f1" echo word document does not exist & exit /b 2



     cscript //E:JScript //nologo "%~f0" "%~f1" "%~2" %~3 %format%
     exit /b 0

    *****  end comment *********/

 var source_file=WScript.Arguments.Item(0);
 var destination_file=WScript.Arguments.Item(1);

 var confirmConv=false;
 var readOnly=true;
 var addToRecentFiles=false;

 var password=WScript.Arguments.Item(2);

//save format enumaration -  http://msdn.microsoft.com/en-us/library/office/ff839952.aspx
// text formats 
//wdFormatText 2
//wdFormatUnicodeText 7
//wdFormatTextLineBreaks 3
 var encoding=parseInt(WScript.Arguments.Item(3));

 var WordApp=new ActiveXObject("Word.Application");
 WordApp.Visible = false;

 var WordDoc=WordApp.Documents.Open(source_file,confirmConv,readOnly,addToRecentFiles,password);
 WordDoc.SaveAs(destination_file,encoding);
 WordDoc.Close();
 WScript.Quit();

的示例:

doc2txtjs.bat "c:\tstpass.docx" "c:\result\tstpass.txt"  unhackable_password -breaks
doc2txtjs.bat "c:\tstpass2.docx" "c:\result\tstpass2.txt"  unhackable_password -unicode
doc2txtjs.bat "c:\tstpass3.docx" "c:\result\tstpass3.txt"  unhackable_password 

-breaks / -unicode将分别使用保留的换行符或unicode格式保存文件。您将再次需要管理员权限。但是,如果您想从doc创建一个bat,则不需要使用这些附加选项。< / p>

答案 3 :(得分:0)

我明白了。我制作了一个批处理程序,它创建一个临时的VBS文件,将其转换为BAT文件而不是TXT。然后我从转换器执行批处理文件。感谢您的所有答案,我看到了一些有用的想法。 :)