我在密码保护的word文件中列出了批处理代码(所以没有人可以编辑我的代码),我需要一个.bat文件,可以将我在那里列出的代码转换为.txt文件,我可以拥有它看了。如果你知道一种制作可以读取文字doc的.bat文件的方法,那也是值得赞赏的。
答案 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调用的参数。 notepad
运行生成的txt文件。:ENDBAT
标签下提取的批处理文件。 用法:只需按自己的意愿运行即可。
<强>更新强>
在比较笔记和在chat进行测试之后,npocmaka和我得出结论,如果使用单词SaveAs,最安全的选择是使用2
类型:wdFormatText
。更多关于npocmaka更新答案的内容
我的示例(使用FileSystemObject编写新文件)显示了一种更简单的方法,即对提取的文本进行后期处理,而不会更新单词的内部最近文件列表(MRU),否则会在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那么可靠。
答案 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。然后我从转换器执行批处理文件。感谢您的所有答案,我看到了一些有用的想法。 :)