Автоматизировать преобразование устаревшего файла .wri в .txt с помощью write.exe?

Я должен преобразовать много старых файлов Windows WRI. У меня есть старый Wordpad - write.exe, который работает на XP или более старой WIN. Я не могу найти никакой информации о доступных параметрах командной строки для write.exe Кажется, единственный вариант: открыть файл, переданный первым аргументом, или распечатать файл с помощью дополнительного аргумента /p.

Что мне нужно: автоматизировать (скрипт BATCH) открытие файла WRI и сохранение в виде файла TXT с помощью write.exe


person janeks malinovskis    schedule 09.01.2014    source источник


Ответы (3)


Посмотрите на AutoIt форумы, которые могут автоматизировать программу с графическим интерфейсом.

person foxidrive    schedule 10.01.2014

установить принтер: "*local printe*r" - "использовать существующий" - "Файл:" В качестве драйвера принтера используйте "Generic" - "Общий/Только текст". Затем вы можете «распечатать» свои документы в файлы:

for %%i in (*.wri) do write /p %%i
person Stephan    schedule 10.01.2014
comment
Это НЕ то же самое, что: открыть редактор write.exe и выполнить команду СОХРАНИТЬ КАК TXT ФАЙЛ. При использовании универсального принтера - результирующий файл будет содержать недопустимые символы, полученные из исходного файла WRI. Так что этот ответ бесполезен. - person janeks malinovskis; 13.01.2014
comment
Существуют драйверы Generic и Generic/Text only. Только текст не должен генерировать недопустимые символы. У меня никогда не было с этим проблем. - person Stephan; 13.01.2014
comment
Да, я пробовал Generic/Text only =› недопустимые символы. Я предполагаю, что этот драйвер нельзя использовать с устаревшей программой WRITE.EXE (версия 3.10) на XP. (я говорю о старой версии write.exe, а не об оригинальной XP write.exe 5.1) - person janeks malinovskis; 15.01.2014
comment
Поскольку вы уже приняли AutoIT-Solution, это чисто академическое: у вас какое-то странное форматирование в ваших документах (изображения, таблицы, встроенные объекты...) или просто нормальное (жирный шрифт, курсив...)? - person Stephan; 15.01.2014
comment
Да, эти старые файлы WRI содержат изображения и другое странное форматирование. На самом деле это очень старые файлы - начиная с 1992 года. Мне нужно было прочитать только текстовую информацию для полнотекстовой индексации. - person janeks malinovskis; 16.01.2014

Создал скрипт AutoIt:

#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>

; http://www.autoitscript.com/site/autoit/downloads/

Opt("WinTitleMatchMode", 1) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase

Local $sWriteExePath = @WorkingDir & "\write.exe"
If Not FileExists($sWriteExePath) Then
   $sWriteExePath = FileOpenDialog("Select the write.exe path", "c:\", "Write (write.exe)", $FD_FILEMUSTEXIST)
   If @error Then
      MsgBox($MB_SYSTEMMODAL, "", "No write.exe path was selected!")
      Exit
   EndIf
EndIf

Local $sFilePath = FileSelectFolder("Select the WRI files directory", "c:\")
If @error Then
  MsgBox($MB_SYSTEMMODAL, "", "No folder was selected!")
  Exit
EndIf

Local $aFileList = _FileListToArray($sFilePath, "*.wri", 1)
If @error = 1 Then
  MsgBox($MB_SYSTEMMODAL, "", "Path was invalid!")
  Exit
EndIf
If @error = 4 Then
  MsgBox($MB_SYSTEMMODAL, "", "No files were found!")
  Exit
EndIf

For $i = 1 To $aFileList[0]
   Call("WriToTxt", $sWriteExePath, $sFilePath, $aFileList[$i])
Next

Func WriToTxt($writeExe, $dir, $fileName)
   Local $pathFrom = $dir & '\' & $fileName
   Local $pathTo = StringReplace($pathFrom, ".wri", ".txt", 1)
   Local $winName = "Write - " & StringReplace($fileName, ".wri", '')

   If Not FileExists($pathTo) Then
      Run($writeExe & ' ' & $pathFrom)
      WinWaitActive($winName)
      Send("!fa")
      WinWaitActive("Save As")
      Send($pathTo)
      ControlSend("Save As", "", "[CLASS:ComboBox; INSTANCE:1]", "Text Files (*.TXT)")
      Sleep(1)
      ControlClick("Save As", "", "[CLASS:Button; TEXT:OK]")
      WinWaitActive("Write", "Do you want to save?", 2)
      If WinActive("Write", "Do you want to save?") Then
         Send("!y")
      EndIf
      WinClose($winName)
   EndIf
EndFunc
person janeks malinovskis    schedule 13.01.2014